R/ListFormula.R

Defines functions ListFormula

Documented in ListFormula

ListFormula <- function(elemental.formula) {

  # check for unusual elements
  chr <- gregexpr("[[:upper:]][[:lower:]]{0,1}", elemental.formula)
  for (i in 1:length(chr[[1]])) {
    y <- attr(chr[[1]], which = "match.length")[i]
    z <- substr(elemental.formula, chr[[1]][i], chr[[1]][i] + y - 1)
    if (!(z == "C" | z =="H" | z =="N" | z =="O" | z =="S" | z =="P"
        | z =="Br" | z =="Cl" | z =="F" | z =="I" | z =="Si" | z=="Sn"))
      warning(paste("Elemental formula", elemental.formula,
                    "contains element not of C,H,N,O,S,P,Br,Cl,F,I,Si,Sn."))
  }

  # get number of atoms
  GetAtoms <- function(elemental.formula, element) {
    reg.exp <- paste(element, "[[:digit:]]*(?![[:lower:]])", sep = "")
    x <- gregexpr(reg.exp, elemental.formula, perl = TRUE)
    if (x[[1]][1] != -1) {
      n <- vector(mode = "numeric", length = length(x[[1]]))
      for (i in 1:length(x[[1]])) {
        y <- attr(x[[1]], which = "match.length")[i]
        z <- substr(elemental.formula, x[[1]][i], x[[1]][i] + y - 1)
        number <- as.numeric(strsplit(z, split = element)[[1]][2])
        if (is.na(number)) {
          n[i] <- 1
        } else {
          n[i] <- number
        }
        atoms <- sum(n)
      } 
    } else {
      atoms <- 0
    }
    return(atoms)
  }

  # get number of atoms of each element
  elements <- c("C", "H", "N", "O", "S", "P", "Br", "Cl", "F", "I", "Si", "Sn")
  result <- as.list(sapply(elements, function(x) { GetAtoms(elemental.formula, x) }))
  return(result)

}

Try the OrgMassSpecR package in your browser

Any scripts or data that you put into this service are public.

OrgMassSpecR documentation built on May 2, 2019, 11:04 a.m.