#' 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))
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.