\documentclass[a4paper, oneside, 10pt]{article}
\usepackage[english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{listings}
\date{\today}
\title{}
\author{}
\begin{document}

\lstset{frame=single}
\begin{lstlisting}

lipidomics.process <- function(input,n,method,triplicate,group.names) #inicio da funcao
      {
#Inicio da funcao
input[,1] <-as.factor(input[,1])     #fazer as amostras como fator
input[,2] <-as.factor(input[,2])     #fazer os lipidios como fator
lista <- split(input, f = input[,1]) #passar as diferentes amostras para lista
samples.names <- c(levels(input[,1]))#vetor com os nomes das amostras

#Etapa de checagem dos parametro
if(is.numeric(n) != TRUE){    
  stop("inserir um valor de n inteiro") #Verificar se o numero de amostras eh um numero inteiro
}

if(is.factor(input[,1]) != TRUE || length(levels(input[,1])) != n ) #checar se a primera coluna eh fator e se os levels eh igual ao numero de amostras
{
  stop("Checar se a primeira coluna se refere as amostras, olhar o exemplo do help")
}

if(is.numeric(input[,3]) != TRUE || is.na(mean(input[,3])) != FALSE) # checar se os valores de area sao numeros e se ha algun NA
{
  stop("Checar se a terceira coluna se refere aos lipidios e se todos os valores sao numericos sem NA, olhar o exemplo do help")
}


#remover os diferentes tipos de ionizacao
for(i in 1:length(levels(input[,1])))
{
  lista[[i]][,2] <- sub(" NH4","",lista[[i]][,2]) #remover NH4 do nome dos lipids
  lista[[i]][,2] <- sub(" H","",lista[[i]][,2])   #remover H do nome dos lipids
  lista[[i]][,2] <- sub(" W","",lista[[i]][,2]) #remover W(H2O) do nome dos lipids
  lista[[i]][,2] <- sub(" AcO","",lista[[i]][,2]) #remover AcO do nome dos lipids
  lista[[i]][,2] <- sub(" Form","",lista[[i]][,2])#remover Form do nome dos lipids
  lista[[i]][,2] <- sub(" Cl","",lista[[i]][,2])  #remover cL do nome dos lipids
}

#somando as areas dos lipidios ionizados de forma diferentes, pois agora estao com o mesmo nome
for(j in 1:length(levels(input[,1])))
{
  lista[[j]] <- aggregate(lista[[j]][,3], by=list(lista[[j]][,2]), FUN=sum) #somando as areas dos lipidios com o mesmo nome
}

V1 <-c(rep(NA ,length(grep("IS",lista[[1]][,1])))) # Vetor com NA para criar um dataframe que contenha os valores dos IS
is.df <- data.frame( V1, row.names = c( lista[[1]][grep("IS",lista[[1]][,1]),1])) #Data frama com os valores de IS e a coluna com cada tipo de IS

#salvando as areas do padrao internos em um objeto e removendo os IS da lista

for(k in 1:length(levels(input[,1])))
{
  is.df[,k] <-  lista[[k]][grep("IS",lista[[k]][,1]),2] #Adicionando os valores de is em uma nova coluna
  lista[[k]] <- lista[[k]][-c(grep("IS",lista[[k]][,1])),] #Removendo os IS da lista final
}

colnames(is.df) <- c(levels(input[,1])) # Colocar os nomes das amostras nas colunas correspondente


#corrigindo pelo valor do padrao interno (IS) correspondente

List.of.IS <- read.csv(paste(getwd(),"IS.list.csv",sep = ""),as.is = TRUE, header = TRUE) #objeto que sera usado para normalizar os PLs 
List.of.IS[,3] <- as.numeric(List.of.IS[,3]) #faz com que a coluna dos valores dos IS seja numerico

if(method == "neg")
  {
 
for(l in 1:length(levels(input[,1])))
{
  lista[[l]][grep("PC ",lista[[l]][,1]),2]<- ((lista[[l]][grep("PC ",lista[[l]][,1]),2]
                                             /is.df[paste(List.of.IS[1,2]),l])* #Normalizar PC com IS 1
                                               (List.of.IS[1,3]))               #Corrige PC com CF 1
  lista[[l]][grep("PE ",lista[[l]][,1]),2]<- ((lista[[l]][grep("PE ",lista[[l]][,1]),2]
                                              /is.df[paste(List.of.IS[2,2]),l])*#Normalizar PE com IS 2
                                                (List.of.IS[2,3]))              #Corrige PE com CF 2
  lista[[l]][grep("PS ",lista[[l]][,1]),2]<- ((lista[[l]][grep("PS ",lista[[l]][,1]),2]
                                             /is.df[paste(List.of.IS[3,2]),l])*#Normalizar PS com IS 3
                                               (List.of.IS[3,3]))              #Corrige PS com CF 3
  lista[[l]][grep("PG ",lista[[l]][,1]),2]<- ((lista[[l]][grep("PG ",lista[[l]][,1]),2]
                                             /is.df[paste(List.of.IS[4,2]),l])*#Normalizar PG com IS 4
                                               (List.of.IS[4,3]))              #Corrige PG com CF 4 
  lista[[l]][grep("PI ",lista[[l]][,1]),2]<- ((lista[[l]][grep("PI ",lista[[l]][,1]),2]
                                             /is.df[paste(List.of.IS[5,2]),l])*#Normalizar PI com IS 5
                                               (List.of.IS[5,3]))              #Corrige PI com CF 5 
  lista[[l]][grep("PA ",lista[[l]][,1]),2]<- ((lista[[l]][grep("PA ",lista[[l]][,1]),2]
                                              /is.df[paste(List.of.IS[6,2]),l])*#Normalizar PA com IS 6
                                               (List.of.IS[6,3]))              #Corrige PA com CF 6
  lista[[l]][grep("CL ",lista[[l]][,1]),2]<- ((lista[[l]][grep("CL ",lista[[l]][,1]),2]
                                             /is.df[paste(List.of.IS[7,2]),l])*#Normalizar CL com IS 7
                                               (List.of.IS[7,3]))              #Corrige CL com CF 7
  lista[[l]][grep("AEG ",lista[[l]][,1]),2]<- ((lista[[l]][grep("AEG ",lista[[l]][,1]),2]
                                             /is.df[paste(List.of.IS[8,2]),l])*#Normalizar AEG com IS 8
                                               (List.of.IS[8,3]))              #Corrige AEG com CF 8
  lista[[l]][grep("PDME ",lista[[l]][,1]),2]<- ((lista[[l]][grep("PDME ",lista[[l]][,1]),2]
                                             /is.df[paste(List.of.IS[9,2]),l])*#Normalizar PDME com IS 9
                                               (List.of.IS[9,3]))              #Corrige PDME com CF 9
  lista[[l]][grep("PME ",lista[[l]][,1]),2]<- ((lista[[l]][grep("PME ",lista[[l]][,1]),2]
                                             /is.df[paste(List.of.IS[10,2]),l])*#Normalizar PME com IS 10
                                               (List.of.IS[10,3]))              #Corrige PME com CF 10
  lista[[l]][grep("Cer ",lista[[l]][,1]),2]<- ((lista[[l]][grep("Cer ",lista[[l]][,1]),2]
                                              /is.df[paste(List.of.IS[11,2]),l])*#Normalizar Cer com IS 11
                                                (List.of.IS[11,3]))              #Corrige cer com CF 11
  lista[[l]][grep("SM ",lista[[l]][,1]),2]<- ((lista[[l]][grep("SM ",lista[[l]][,1]),2]
                                               /is.df[paste(List.of.IS[12,2]),l])*#Normalizar SM com IS 12
                                               (List.of.IS[12,3]))              #Corrige SM com CF 12
    }
}
if(method == "pos")
{
for(m in 1:length(levels(input[,1])))
{
  lista[[m]][grep("CE ",lista[[m]][,1]),2]<- ((lista[[m]][grep("CE ",lista[[m]][,1]),2]
                                             /is.df[paste(List.of.IS[1,2]),m])* #Normalizar CE com IS 1
                                              (List.of.IS[1,3]))                 #Corrige CE com CF 1
  lista[[m]][grep("Cholesterol",lista[[m]][,1]),2]<- ((lista[[m]][grep("Cholesterol",lista[[m]][,1]),2]
                                             /is.df[paste(List.of.IS[2,2]),m])* #Normalizar Cholesterol com IS 2
                                            (List.of.IS[2,3]))                 #Corrige Cholesterol com CF 2
  lista[[m]][grep("Sitosterol",lista[[m]][,1]),2]<- ((lista[[m]][grep("Sitosterol",lista[[m]][,1]),2]
                                                      /is.df[paste(List.of.IS[3,2]),m])* #Normalizar Sitosterol ou Sitosterol Ester com IS 3
                                                        (List.of.IS[3,3]))  #Corrige Cholesterol com CF 3
  lista[[m]][grep("Campesterol",lista[[m]][,1]),2]<- ((lista[[m]][grep("Campesterol",lista[[m]][,1]),2]
                                                     /is.df[paste(List.of.IS[4,2]),m])* #Normalizar Campesterol ou Campesterol Ester com IS 4
                                                       (List.of.IS[4,3]))  #Corrige Cholesterol com CF 4
  lista[[m]][grep("Q",lista[[m]][,1]),2]<- ((lista[[m]][grep("Q",lista[[m]][,1]),2]
                                                     /is.df[paste(List.of.IS[5,2]),m])* #Normalizar coenzimas Q10, Q9 ou Q8 com IS 5
                                                      (List.of.IS[5,3]))  #Corrige Q10, Q9 ou Q8 com CF 5
  lista[[m]][grep("DAG ",lista[[m]][,1]),2]<- ((lista[[m]][grep("DAG ",lista[[m]][,1]),2]
                                             /is.df[paste(List.of.IS[6,2]),m])* #Normalizar DAG com IS 6
                                               (List.of.IS[6,3]))  #Corrige DAG com CF 6
    lista[[m]][grep("MAGE ",lista[[m]][,1]),2]<- ((lista[[m]][grep("MAGE ",lista[[m]][,1]),2]
                                              /is.df[paste(List.of.IS[7,2]),m])* #Normalizar MAGE com IS 7
                                                (List.of.IS[7,3]))  #Corrige MAGE com CF 7
  lista[[m]][grep("TAG ",lista[[m]][,1]),2]<- ((lista[[m]][grep("TAG ",lista[[m]][,1]),2]
                                              /is.df[paste(List.of.IS[8,2]),m])* #Normalizar TAG com IS 8
                                                (List.of.IS[8,3]))  #Corrige TAG com CF 8
  lista[[m]][grep("DAGE ",lista[[m]][,1]),2]<- ((lista[[m]][grep("DAGE ",lista[[m]][,1]),2]
                                              /is.df[paste(List.of.IS[9,2]),m])* #Normalizar DAGE com IS 9
                                                  (List.of.IS[9,3]))  #Corrige DAGE com CF 9
}
}
Finalmean <- data.frame(lista[[1]][,1]) #objeto que será guardado os valores das medias
Finalsd <- data.frame(lista[[1]][,1]) #objeto que será guardado os valores de desvio padrao
dir.create("Final") #diretorio onde serao guardados dos dados arrumados

if(triplicate == TRUE){
#Agrupando as replicatas em um mesmo dataframe guardados em uma lista(listb)
#Por enquanto so triplicata
listb <- as.list(V1)
for( p in 1:length(group.names))
{
  listb[[p]] <- data.frame(lista[[(3*p-2)]], lista[[(3*p-2)+1]][,2],lista[[(3*p-2)+2]][,2]) #agrupando triplicatas, 3p-2 eh para ir mudando em triplicas:1,4,7,...
  listb[[p]][,5] <- rowMeans(listb[[p]][,2:4])                            #Media da triplicata
  listb[[p]][,6] <- apply(listb[[p]][,2:4],1,FUN = sd)                    #Desvio padrao da triplicata
  
  colnames(listb[[p]]) <- c(group.names[p], "1","2","3","Mean","SD")           #Nomes das colunas, indicando a replicata, media e desvio padrao
  write.csv(listb[[p]], 
            file = paste(getwd(),"/Final/",group.names[p],".csv", 
                         sep = ""), row.names = F)                        #salvando cada dataframe da lista b em arquivos csv.
  
  Finalmean[,p+1] <- data.frame(listb[[p]][,5])
  Finalsd[,p+1] <- data.frame(listb[[p]][,6])
  
}
colnames(Finalmean) <- c("mean",c(group.names)) # alterando os nomes das colunas do dataframe que contem as media
colnames(Finalsd) <- c("sd",c(group.names)) # alterando os nomes das colunas do dataframe que contem as desvio padrao
write.csv(Finalmean, file = paste(getwd(),"/Final/Finalmean.csv",sep = ""), row.names = F) #salvando a planilha que contem as medias
write.csv(Finalsd, file = paste(getwd(),"/Final/Finalsd.csv",sep = ""), row.names = F) #salvando a planilha que contem as medias 
} else{
  for(m in 1:n)
  {
    Finalmean[,m+1] <- data.frame(lista[[m]][,2]) #gravando os valores corrigidos em um dataframe
    
  }
  colnames(Finalmean) <- c("",c(levels(input[,1]))) # alterando os nomes das colunas do dataframe para os nomes das amostras
  write.csv(Finalmean, file = paste(getwd(),"/Final/Final.csv",sep = ""), row.names = F) #salvando a planilha que contem as ares normalizadas
}
}
\end{lstlisting}



\end{document}
