R/03_subset_lipidclass.R

Defines functions subsetsubclass subsetmainclass subsetcat

Documented in subsetcat subsetmainclass subsetsubclass

#' subsetcat()
#'
#' Subset of the lipid chain object based on it's lipid category.
#'
#' @param X object of class *.intact, *.chain, or *.allchains
#' @param cat character string specifying the category of a lipid to subset
#'
#' @return An object of the same class as X.
#'
#' @details  Subset an object based on its lipid category. Supported categories:
#' @details "Sphingolipid","Prenol","Glycerolipid","Sterol","FattyAcyls","Glycerophospholipid"
#'
#' @examples subsetcat(queryExample.intact,cat="Glycerolipid")
#'
#' @author Geremy Clair
#'
#' @export

subsetcat <- function(X,cat="Categoryname"){
  if(typeof(X)!="list"){stop("X has to be an object generated by the lipid miner function")}
  if(!(cat %in% cat.colors$Category)){stop("Your category is not supported by this function")}

  stopifnot(is.character(cat)&&length(cat)==1)

  object<- X
  subseter<- object$Lipid

  #Compute the main class from the rowname  ?? Can you think of a reason (for the current capability we are shooting for with the Shiny app) when hard-coding these would cause a problem?
  subseter <- subseter[!grepl("\\(d5\\)", subseter,ignore.case = TRUE)]
  subseter<- gsub("\\(3'-sulfo)Galbeta-Cer\\b","Sulfatide",subseter,ignore.case = TRUE)
  subseter<- gsub("M\\(IP\\)2C", "MIP2C", subseter) #rename M(IP)2C by M(IP)2C #PARENTHESIS PROBLEM FOR M(IP)2C
  subseter<- gsub(".*anandamide\\(", "EA(", subseter,ignore.case = TRUE)
  subseter<- gsub(".*CoenzymeQ.*", "CoQ(", subseter,ignore.case = TRUE)
  subseter<- gsub(".*CoQ.*", "CoQ(", subseter,ignore.case = TRUE)
  subseter<- gsub(".*Sulfatide", "Sulfatide(", subseter,ignore.case = TRUE)
  subseter<- gsub("Cholesterol", "Cholesterol(", subseter,ignore.case = TRUE)
  subseter<- gsub("Sulfatide\\(\\(","Sulfatide(",subseter,ignore.case = TRUE)
  subseter<- gsub("caritine\\(\\(","caritine(",subseter,ignore.case = TRUE)
  subseter<- gsub("PE-NMe2\\(","PE\\(NMe2\\-",subseter )
  subseter<- gsub("PE-NMe\\(","PE\\(NMe\\-",subseter )
  subseter<- gsub("\\,n\\-3","",subseter,ignore.case = TRUE)
  subseter<- gsub("\\,n\\-6","",subseter,ignore.case = TRUE)
  subseter<- gsub("\\,n\\-9","",subseter,ignore.case = TRUE)

  subseter<- gsub("\\(.*", "",subseter)
  subseter<-gsub("(.*)\\[.*", "\\1", subseter)


  # compute the lipid Category based on the main class
  #create the different lists
  FattyAcyls<-c("EA","carnitine", "FAHFA", "WE" )
  Prenol<- c("CoQ")
  Sterol<- c("Cholesterol","CE")
  Sphingolipids<- c("Cer","CerP","HexCer","SM","GM3","GD","PE-Cer","PI-Cer","Sulfatide","GM1","GM2","LacCer","GalCer","GD1", "GD3","GlcCer", "MIP2C","MIPC","GT3")
  Glycerophospholipids<-c("PE", "PC", "PS", "PI", "PG", "PA", "CL","PE-NMe", "PE-NMe2","PIP","PIP2", "PIP3")
  Glycerolipids<- c("TG","DG","MG","DGDG","MGDG","SQMG", "SQDG", "DGTS/A")

  #Fill the category section
  subseter.cat<- rep("Uncategorized", length(subseter))
  subseter.cat[subseter %in% Sphingolipids]<-"Sphingolipid"
  subseter.cat[subseter %in% Prenol]<-"Prenol"
  subseter.cat[subseter %in% Glycerolipids]<-"Glycerolipid"
  subseter.cat[subseter %in% Sterol]<-"Sterol"
  subseter.cat[subseter %in% FattyAcyls]<-"FattyAcyls"
  subseter.cat[subseter %in% Glycerophospholipids]<-"Glycerophospholipid"

  #add this to the table
  object$subseter.cat <- subseter.cat

  #keep only the row where the Mainclass is corresponding to
  object<- object[subseter.cat==cat,]
  object<- object[,-grep("subseter.cat", colnames(object))]
  return(object)
}

#' subsetmainclass()
#'
#' Subset of the lipid chain object based on the main class
#'
#' @param X object of class *.intact, *.chain, or *.allchains
#' @param mainclass character string specifying the main class of lipid to subset
#'
#' @return An object of the same class as X.
#'
#' @details Subset an object based on its lipid main class
#' @details (text prior the parenthesis in the lipid name).
#' @details The main classes supported are in the main.colors object.
#'
#' @examples subsetmainclass(queryExample.intact,mainclass="TG")
#'
#' @author Geremy Clair
#'
#' @export

subsetmainclass <- function(X,mainclass="MainClassname"){
  if(typeof(X)!="list"){stop("X has to be an object generated by the lipid miner function")}
  if(!(mainclass %in% main.colors$MainClass)){stop("Your main class is not supported by this function")}

  object<- X
  subseter<- object$Lipid

  #Compute the main class from the rowname  ?? Can you think of a reason (for the current capability we are shooting for with the Shiny app) when hard-coding these would cause a problem?
  subseter <- subseter[!grepl("\\(d5\\)", subseter,ignore.case = TRUE)]
  subseter<- gsub("\\(3'-sulfo)Galbeta-Cer\\b","Sulfatide",subseter,ignore.case = TRUE)
  subseter<- gsub("M\\(IP\\)2C", "MIP2C", subseter) #rename M(IP)2C by M(IP)2C #PARENTHESIS PROBLEM FOR M(IP)2C
  subseter<- gsub(".*anandamide\\(", "EA(", subseter,ignore.case = TRUE)
  subseter<- gsub(".*CoenzymeQ.*", "CoQ(", subseter,ignore.case = TRUE)
  subseter<- gsub(".*CoQ.*", "CoQ(", subseter,ignore.case = TRUE)
  subseter<- gsub(".*Sulfatide", "Sulfatide(", subseter,ignore.case = TRUE)
  subseter<- gsub("Cholesterol", "Cholesterol(", subseter,ignore.case = TRUE)
  subseter<- gsub("Sulfatide\\(\\(","Sulfatide(",subseter,ignore.case = TRUE)
  subseter<- gsub("caritine\\(\\(","caritine(",subseter,ignore.case = TRUE)
  subseter<- gsub("PE-NMe2\\(","PE\\(NMe2\\-",subseter )
  subseter<- gsub("PE-NMe\\(","PE\\(NMe\\-",subseter )
  subseter<- gsub("\\,n\\-3","",subseter,ignore.case = TRUE)
  subseter<- gsub("\\,n\\-6","",subseter,ignore.case = TRUE)
  subseter<- gsub("\\,n\\-9","",subseter,ignore.case = TRUE)
  subseter<- gsub("\\(.*", "",subseter)
  subseter<-gsub("(.*)\\[.*", "\\1", subseter)

  #replace unknown classes
  subseter[!subseter %in% main.colors$MainClass]<-"Uncategorized"


  #add this to the table
  object$subseter <- subseter

  #keep only the row where the Mainclass is corresponding to
  object<- object[subseter==mainclass,]
  object<- object[,-grep("subseter", colnames(object))]
  return(data.frame(object))
}

#' subsetsubclass()
#'
#' Subset of the lipid chain object based on it's lipid subclass
#'
#' @param X object of class *.intact, *.chain, or *.allchains
#' @param subclass character string specifying the subclass of lipid to subset
#'
#' @return An object of the same class as X.
#'
#' @details Subset an object based on its lipid main class
#' @details (text prior the parenthesis in the lipid name).
#' @details The subclasses supported are in the sub.colors object.
#'
#' @examples subsetsubclass(queryExample.intact,subclass="LPE(")
#'
#' @author Geremy Clair
#'
#' @export
#'

subsetsubclass <- function(X,subclass="subclassname"){
  if(typeof(X)!="list"){stop("X has to be an object generated by the lipid miner function")}
  if(!(subclass %in% sub.colors$SubClass)){stop("Your category is not supported by this function")}

  object <- X
  X<- object$Lipid
  subseter <- object$Lipid

  #remove the deuterated standards from the list
  X <- X[!grepl("\\(d5\\)", X)]

  #Create the output df
  df<-data.frame(matrix(NA,ncol = 27, nrow = length(X)))
  colnames(df)<- c("Lipid","Category", "Main class", "Sub class", "Total Number of Carbon", "Double Bonds", "Chain 1", "Chain 2", "Chain 3", "Chain 4", "N Carbon Chain1", "N Carbon Chain2", "N Carbon Chain3", "N Carbon Chain4", "DB Chain1", "DB Chain2","DB Chain3","DB Chain4","Lyso","SCFA","MCFA","LCFA","VLCFA", "Saturated", "Monounsaturated", "Diunsaturated", "Polyunsaturated" )
  df$Lipid <- X


  # Compute the main class
  X<- gsub("\\(3'-sulfo)Galbeta-Cer\\b","Sulfatide",X, ignore.case = TRUE)
  X<- gsub("M\\(IP\\)2C", "MIP2C", X) #rename M(IP)2C by M(IP)2C #PARENTHESIS PROBLEM FOR M(IP)2C
  X<- gsub(".*anandamide\\(", "EA(", X,ignore.case = TRUE)
  X<- gsub(".*CoenzymeQ.*", "CoQ(", X,ignore.case = TRUE)
  X<- gsub(".*CoQ.*", "CoQ(", X,ignore.case = TRUE)
  X<- gsub(".*Sulfatide", "Sulfatide(", X,ignore.case = TRUE)
  X<- gsub("Cholesterol", "Cholesterol(", X,ignore.case = TRUE)
  X<- gsub("Sulfatide\\(\\(","Sulfatide(",X,ignore.case = TRUE)
  X<- gsub("caritine\\(\\(","caritine(",X,ignore.case = TRUE)
  X<- gsub("PE-NMe2\\(","PE\\(NMe2\\-",X,ignore.case = TRUE)
  X<- gsub("PE-NMe\\(","PE\\(NMe\\-",X,ignore.case = TRUE)
  X<- gsub("\\,n\\-3","",X,ignore.case = TRUE)
  X<- gsub("\\,n\\-6","",X,ignore.case = TRUE)
  X<- gsub("\\,n\\-9","",X,ignore.case = TRUE)


  mainclass.list<- gsub("\\(.*", "",X)
  mainclass.list<-gsub("(.*)\\[.*", "\\1", mainclass.list)

  df$`Main class`<-mainclass.list

  # Modify the input to remove unwanted strings and introduce the <oxidized> and <hydroxy>
  #remove text after ";"
  X<-gsub("\\;.*","",X)

  #Remove the text inside brackets from X
  X<-gsub("\\[[^\\]]*\\]", "", X)

  #transform the (CHO) (OH) and (COOH) into <oxidized>
  X<-gsub("\\(CHO\\)", "<oxidized>", X) #CHO
  X<-gsub("\\(COOH\\)", "<oxidized>", X) # (COOH)
  X<-gsub("\\(12OH\\)","<oxidized>",X) #(12OH[S])
  X<-gsub("\\(14OH\\)","<oxidized>",X) #(12OH[S])
  X<-gsub("\\(15OH\\)","<oxidized>",X) #(12OH[S])
  X<-gsub("\\(5OH\\)","<oxidized>",X) #(5OH[S])
  X<-gsub("\\(2OH\\)", "<hydroxy>", X) ##(2OH[S])

  #modify the CardioLipids for proper minning
  X<- gsub("1\\'\\-\\[","",X)#remove the 1'-[
  X<- gsub("\\,3\\'\\-\\[","\\/",X)#remove the 3'-[
  X<- gsub("\\]","",X)#remove the ]

  #compute the chains, the N of carbon, the N of DB, the total N of C and of Db by mining between the outermost parenthesis
  #extract the fatty acid chains
  chains.list<-X
  chains.list<- gsub("(.*)\\).*", "\\1", chains.list) #after last parenthesis
  chains.list<- sub(".*\\(.*?", "", chains.list) #before the first parenthesis
  chains.list<-gsub("NMe[2]\\-","",chains.list)
  chains.list<-gsub("NMe\\-","",chains.list)

  #split using '/' character
  chains.list<-as.list(strsplit(as.character(chains.list), '/'))#split into
  chains.list<-lapply(chains.list, `length<-`,4)
  chains.df <- data.frame(matrix(unlist(chains.list), nrow=length(X),byrow=T))


  df$`Chain 1`<- chains.df$X1
  df$`Chain 2`<- chains.df$X2
  df$`Chain 3`<- chains.df$X3
  df$`Chain 4`<- chains.df$X4

  #REMOVE 0:0 in DG and MG in df
  DGMG<-c("DG","MG")
  df$`Chain 1`[grepl("^0\\:0",df$`Chain 1`)&df$`Main class`%in% DGMG]<-NA
  df$`Chain 2`[grepl("^0\\:0",df$`Chain 2`)&df$`Main class`%in% DGMG]<-NA
  df$`Chain 3`[grepl("^0\\:0",df$`Chain 3`)&df$`Main class`%in% DGMG]<-NA
  df$`Chain 4`[grepl("^0\\:0",df$`Chain 3`)&df$`Main class`%in% DGMG]<-NA

  #Bring this back in the chain object
  chains<-paste(df$`Chain 1`,"/",df$`Chain 2`,"/",df$`Chain 3`,"/",df$`Chain 4`, sep="")

  #remove O- P- d t <ox> <hydroxyle>, etc
  chains<- gsub("<oxidized>", "",chains)
  chains<- gsub("<hydroxy>", "",chains)
  chains<- gsub("5-O-","O-",chains)
  chains<- gsub("6-O-","O-",chains)
  chains<- gsub("7-O-","O-",chains)
  chains<- gsub("8-O-","O-",chains)
  chains<- gsub("9-O-","O-",chains)
  chains<- gsub("10-O-","O-",chains)
  chains<- gsub("11-O-","O-",chains)
  chains<- gsub("12-O-","O-",chains)
  chains<- gsub("13-O-","O-",chains)
  chains<- gsub("O-", "",chains)
  chains<- gsub("P-", "",chains)
  chains<- gsub("d", "",chains)
  chains<- gsub("t", "",chains)
  chains<- gsub("h", "",chains)
  chains<- gsub("Me\\)", "",chains)
  chains<- gsub("m", "",chains)

  #chains<- gsub("\\)Me", "",chains)

  #remove internal parenthesis
  chains.list<- gsub("\\s*\\([^\\)]+\\)","",chains)
  chains.list<- gsub("\\(5E,9E","",chains.list)



  #split the string
  chains.list<-as.list(strsplit(as.character(chains.list), '/'))#split into list
  chains.list<-lapply(chains.list, `length<-`,4)
  chains.df <- data.frame(matrix(unlist(chains.list), nrow=length(X),byrow=T))

  #N carbon Chains 1->4
  df$`N Carbon Chain1` <- gsub(":.*","",chains.df$X1)
  df$`N Carbon Chain2` <- gsub(":.*","",chains.df$X2)
  df$`N Carbon Chain3` <- gsub(":.*","",chains.df$X3)
  df$`N Carbon Chain4` <- gsub(":.*","",chains.df$X4)

  #DB Chains 1->4
  df$`DB Chain1` <- gsub(".*:","",chains.df$X1)
  df$`DB Chain2` <- gsub(".*:","",chains.df$X2)
  df$`DB Chain3` <- gsub(".*:","",chains.df$X3)
  df$`DB Chain4` <- gsub(".*:","",chains.df$X4)

  #create a function to make real NAs
  make.true.NA <- function(x) if(is.character(x)||is.factor(x)){
    is.na(x) <- x=="NA"; x} else {
      x}
  df[] <- lapply(df, make.true.NA)

  #Total number of carbon
  suppressWarnings(chains.df$X1<-as.numeric(df$`N Carbon Chain1`))
  suppressWarnings(chains.df$X2<-as.numeric(df$`N Carbon Chain2`))
  suppressWarnings(chains.df$X3<-as.numeric(df$`N Carbon Chain3`))
  suppressWarnings(chains.df$X4<-as.numeric(df$`N Carbon Chain4`))
  
  chains.df$X1[is.na(chains.df$X1)]<-0
  chains.df$X2[is.na(chains.df$X2)]<-0
  chains.df$X3[is.na(chains.df$X3)]<-0
  chains.df$X4[is.na(chains.df$X4)]<-0
  

  df$`Total Number of Carbon`<- rowSums (chains.df, na.rm = T)

  #Total number of DB
  suppressWarnings(chains.df$X1<-as.numeric(df$`DB Chain1`))
  suppressWarnings(chains.df$X2<-as.numeric(df$`DB Chain2`))
  suppressWarnings(chains.df$X3<-as.numeric(df$`DB Chain3`))
  suppressWarnings(chains.df$X4<-as.numeric(df$`DB Chain4`))

  chains.df$X1[is.na(chains.df$X1)]<-0
  chains.df$X2[is.na(chains.df$X2)]<-0
  chains.df$X3[is.na(chains.df$X3)]<-0
  chains.df$X4[is.na(chains.df$X4)]<-0
  
  df$`Double Bonds`<- rowSums (chains.df, na.rm = T)

  remove(chains.df)

  #comupte the subclass by minning between the parenthesis and adding the subclass to the main class
  #O P d t DiEther ox and Lyso
  subclass.list<- gsub("<oxidized>", "<@>", X)
  subclass.list<- gsub("<hydroxy>", "<#>", subclass.list)
  subclass.list<- gsub("NMe[2]\\-", "\\|", subclass.list)
  subclass.list<- gsub("NMe\\-", "\\%", subclass.list)
  subclass.list<- gsub("(.*)\\).*", "\\1", subclass.list) #after last parenthesis
  subclass.list<- sub(".*\\(.*?", "", subclass.list) #before the first parenthesis
  subclass.list<- gsub("\\d", "",subclass.list) #remove numbers
  subclass.list<- gsub("\\:","",subclass.list)#remove the :
  subclass.list<- gsub("\\/","",subclass.list)#remove the /
  subclass.list<- gsub("\\(","",subclass.list)#remove the (
  subclass.list<- gsub("\\Z","",subclass.list)#remove the Z
  subclass.list<- gsub("\\E","",subclass.list)#remove the E
  subclass.list<- gsub("\\,","",subclass.list)#remove the ,
  subclass.list<- gsub("\\)","",subclass.list)#remove the )
  subclass.list<- gsub("\\A","",subclass.list)#remove the )
  subclass.list<- gsub("\\-O","O",subclass.list)#remove the -O replace by O
  subclass.list<- gsub("OO\\-","diester",subclass.list)#remove the -O replace by O
  subclass.list<-gsub( "Cholesterol","", subclass.list)
  subclass.list<-gsub( "CSulfatide","", subclass.list)
  subclass.list<-gsub( "CoQ","",subclass.list)

  #bring back oxidized and hydroxy
  subclass.list<-gsub( "<@>","<oxidized>", subclass.list)
  subclass.list<-gsub( "<#>","<hydroxy>", subclass.list)
  subclass.list<- gsub( "\\|","NMe2\\-", subclass.list)
  subclass.list<- gsub( "\\%","NMe\\-", subclass.list)


  #create the subclass list
  df$`Sub class`<- paste(df$`Main class`,"(",subclass.list,sep="")

  #Lyso (in the subclass and Lyso column)
  noNA<-data.frame(df[,11:18])
  noNA[is.na(noNA)]<- 123456789

  df[noNA$N.Carbon.Chain1==0 & noNA$`DB.Chain1`==0,4]<-paste("L",df[noNA$N.Carbon.Chain1==0 & noNA$`DB.Chain1`==0,4],sep="")
  df[noNA$N.Carbon.Chain2==0 & noNA$`DB.Chain2`==0,4]<-paste("L",df[noNA$N.Carbon.Chain2==0 & noNA$`DB.Chain2`==0,4],sep="")
  df[noNA$N.Carbon.Chain3==0 & noNA$`DB.Chain3`==0,4]<-paste("L",df[noNA$N.Carbon.Chain3==0 & noNA$`DB.Chain3`==0,4],sep="")
  df[noNA$N.Carbon.Chain4==0 & noNA$`DB.Chain4`==0,4]<-paste("L",df[noNA$N.Carbon.Chain4==0 & noNA$`DB.Chain4`==0,4],sep="")

  remove(noNA)

  # Chains, Calculate the chains properties
  #this can probably be simplified for faster calculation

  chains.df<-cbind(df$Lipid,df[,7:27])
  chains.df[,6:13]<-df[,11:18]
  chains.df[,6:13][is.na(chains.df[,6:13])]<-"-1"
  chains.df[,14:22]<-0
  colnames(chains.df)[1]<-"Lipid"

  for(i in 6:13){
    chains.df[,i]<-as.numeric(chains.df[,i])
  }

  for (i in 1:nrow(chains.df)){
    if(chains.df$`N Carbon Chain1`[i]==0){chains.df$Lyso[i]<-chains.df$Lyso[i]+1}
    if(chains.df$`N Carbon Chain2`[i]==0){chains.df$Lyso[i]<-chains.df$Lyso[i]+1}
    if(chains.df$`N Carbon Chain3`[i]==0){chains.df$Lyso[i]<-chains.df$Lyso[i]+1}
    if(chains.df$`N Carbon Chain4`[i]==0){chains.df$Lyso[i]<-chains.df$Lyso[i]+1}
    if(chains.df$`N Carbon Chain1`[i]>=1 && chains.df$`N Carbon Chain1`[i]<=5 ){chains.df$SCFA[i]<-chains.df$SCFA[i]+1}
    if(chains.df$`N Carbon Chain2`[i]>=1 && chains.df$`N Carbon Chain2`[i]<=5 ){chains.df$SCFA[i]<-chains.df$SCFA[i]+1}
    if(chains.df$`N Carbon Chain3`[i]>=1 && chains.df$`N Carbon Chain3`[i]<=5 ){chains.df$SCFA[i]<-chains.df$SCFA[i]+1}
    if(chains.df$`N Carbon Chain4`[i]>=1 && chains.df$`N Carbon Chain4`[i]<=5 ){chains.df$SCFA[i]<-chains.df$SCFA[i]+1}
    if(chains.df$`N Carbon Chain1`[i]>5 && chains.df$`N Carbon Chain1`[i]<=12 ){chains.df$MCFA[i]<-chains.df$MCFA[i]+1}
    if(chains.df$`N Carbon Chain2`[i]>5 && chains.df$`N Carbon Chain2`[i]<=12 ){chains.df$MCFA[i]<-chains.df$MCFA[i]+1}
    if(chains.df$`N Carbon Chain3`[i]>5 && chains.df$`N Carbon Chain3`[i]<=12 ){chains.df$MCFA[i]<-chains.df$MCFA[i]+1}
    if(chains.df$`N Carbon Chain4`[i]>5 && chains.df$`N Carbon Chain4`[i]<=12 ){chains.df$MCFA[i]<-chains.df$MCFA[i]+1}
    if(chains.df$`N Carbon Chain1`[i]>12 && chains.df$`N Carbon Chain1`[i]<=21 ){chains.df$LCFA[i]<-chains.df$LCFA[i]+1}
    if(chains.df$`N Carbon Chain2`[i]>12 && chains.df$`N Carbon Chain2`[i]<=21 ){chains.df$LCFA[i]<-chains.df$LCFA[i]+1}
    if(chains.df$`N Carbon Chain3`[i]>12 && chains.df$`N Carbon Chain3`[i]<=21 ){chains.df$LCFA[i]<-chains.df$LCFA[i]+1}
    if(chains.df$`N Carbon Chain4`[i]>12 && chains.df$`N Carbon Chain4`[i]<=21 ){chains.df$LCFA[i]<-chains.df$LCFA[i]+1}
    if(chains.df$`N Carbon Chain1`[i]>=22){chains.df$VLCFA[i]<-chains.df$VLCFA[i]+1}
    if(chains.df$`N Carbon Chain2`[i]>=22){chains.df$VLCFA[i]<-chains.df$VLCFA[i]+1}
    if(chains.df$`N Carbon Chain3`[i]>=22){chains.df$VLCFA[i]<-chains.df$VLCFA[i]+1}
    if(chains.df$`N Carbon Chain4`[i]>=22){chains.df$VLCFA[i]<-chains.df$VLCFA[i]+1}
    if(chains.df$`DB Chain1`[i]==0){chains.df$Saturated[i]<-chains.df$Saturated[i]+1}
    if(chains.df$`DB Chain2`[i]==0){chains.df$Saturated[i]<-chains.df$Saturated[i]+1}
    if(chains.df$`DB Chain3`[i]==0){chains.df$Saturated[i]<-chains.df$Saturated[i]+1}
    if(chains.df$`DB Chain4`[i]==0){chains.df$Saturated[i]<-chains.df$Saturated[i]+1}
    if(chains.df$`DB Chain1`[i]==1){chains.df$Monounsaturated[i]<-chains.df$Monounsaturated[i]+1}
    if(chains.df$`DB Chain2`[i]==1){chains.df$Monounsaturated[i]<-chains.df$Monounsaturated[i]+1}
    if(chains.df$`DB Chain3`[i]==1){chains.df$Monounsaturated[i]<-chains.df$Monounsaturated[i]+1}
    if(chains.df$`DB Chain4`[i]==1){chains.df$Monounsaturated[i]<-chains.df$Monounsaturated[i]+1}
    if(chains.df$`DB Chain1`[i]==2){chains.df$Diunsaturated[i]<-chains.df$Diunsaturated[i]+1}
    if(chains.df$`DB Chain2`[i]==2){chains.df$Diunsaturated[i]<-chains.df$Diunsaturated[i]+1}
    if(chains.df$`DB Chain3`[i]==2){chains.df$Diunsaturated[i]<-chains.df$Diunsaturated[i]+1}
    if(chains.df$`DB Chain4`[i]==2){chains.df$Diunsaturated[i]<-chains.df$Diunsaturated[i]+1}
    if(chains.df$`DB Chain1`[i]>=3){chains.df$Polyunsaturated[i]<-chains.df$Polyunsaturated[i]+1}
    if(chains.df$`DB Chain2`[i]>=3){chains.df$Polyunsaturated[i]<-chains.df$Polyunsaturated[i]+1}
    if(chains.df$`DB Chain3`[i]>=3){chains.df$Polyunsaturated[i]<-chains.df$Polyunsaturated[i]+1}
    if(chains.df$`DB Chain4`[i]>=3){chains.df$Polyunsaturated[i]<-chains.df$Polyunsaturated[i]+1}
  }
  df[,19:27]<-chains.df[,14:22]

  chains.df<- chains.df[!(chains.df$`N Carbon Chain2`==-1&df$`Main class`=="TG"),]

  chains.df[chains.df==-1]<- NA

  ################################################################

  #create the last object that combine the existing chains in a vector
  allchains<- data.frame(matrix(nrow = 4*nrow(chains.df), ncol=2))
  allchains[,1]<- c(paste(chains.df$Lipid,"_Chain1",sep=""),paste(chains.df$Lipid,"_Chain2",sep=""),paste(chains.df$Lipid,"_Chain3",sep=""),paste(chains.df$Lipid,"_Chain4",sep=""))
  allchains[,2]<-c(as.character(chains.df$`Chain 1`),as.character(chains.df$`Chain 2`),as.character(chains.df$`Chain 3`),as.character(chains.df$`Chain 4`))
  colnames(allchains)<- c("Lipid", "Chain")
  allchains<- allchains[!is.na(allchains$Chain),]


  object$subseter <- df$`Sub class`
  object$subseter[!object$subseter %in% sub.colors$SubClass]<-"Uncategorized"



  #keep only the row where the Mainclass is corresponding to
  object<- object[object$subseter==subclass,]
  object<- object[,-grep("subseter", colnames(object))]
  return(data.frame(object))
}
PNNL-Comp-Mass-Spec/Rodin documentation built on Jan. 28, 2024, 2:12 a.m.