R/Info_Cal.R

#' @title Info_cal
#' @description  calculate formula, exact mass, and charge
#' @author Zhiwei Zhou
#' \email{zhouzw@@sioc.ac.cn}
#' @param raw.data The smiles structure as vector format.
#' @param is.output Whether output the csv file? The default is TRUE.
#' @param output.address The output address of csv file. The default is NULL.
#' @return a matrix (n*3) including formula, exact mass, and charge
#' @example Info_Cal(raw.data=raw.data)

Info_Cal <- function(raw.data,
                     is.output=TRUE,
                     output.address=NULL){
  temp <- rcdk::parse.smiles(raw.data)

  cat("Start calculate the Formula and Exact mass\n")
  formula.info <- lapply(seq(length(temp)), function(i){
    # if (i %in% seq(length(temp), length.out = 11)) {
    #   cat(round((i/length(temp))*100, digits = 2)); cat("%"); cat(" ")
    # }
    cat(i); cat(" ")

    temp.formula <- temp[[i]]
    temp.result <- rcdk::get.mol2formula(temp.formula)

    formula <- temp.result@string
    exact.mass <- round(as.numeric(temp.result@mass), digits = 4)
    charge <- temp.result@charge

    result <- c(formula, exact.mass, charge)
    names(result) <- c("formula", "exact.mass", "charge")

    return(result)
  })

  result <- do.call(rbind, formula.info)
  result <- data.frame(formula=result[,1], exact.mass=result[,2], charge=result[,3])

  if (is.output==TRUE) {
    cat("Start output result\n")
    if (is.null(output.address)) {
      temp <- paste("info", "csv", sep = ".")
    } else {
      temp <- paste(output.address, "info.csv", sep = "/")
    }

    write.csv(result, temp, row.names = F)
  }

  return(result)

}
JustinZZW/LipLibBuild documentation built on May 28, 2019, 12:56 p.m.