ef.primr <- function(x, ct.ctrl=0.75, na.rm=TRUE) { if(class(x)!="data.frame") #verificação se o objeto inserido à função pertence à classe "data.frame". { stop("\t", "Objeto deve ser de classe data.frame") #informar uma mensagem de erro quando o objeto não é um "data.frame". } if(na.rm==TRUE) #verificação se valores NA devem ser retirados do cálculo. { na.omit(x) #retira eventuais valores NA presentes. } data.x <- x[x[,1] > 0,] #cria um dataframe retirando apenas os valores de cDNA maiores que 0. slp <- rep(NA, length=ncol(x)) #cria um vetor para armazenar os valores do slope obtidos na função for() a seguir. intcpt <- rep(NA, length=ncol(x)) #cria um vetor para armazenar os valores do intercept obtidos na função for() a seguir. for(i in 2:(ncol(x))) #função for() para a geração dos modelos para cada par de primer e obtenção dos valores de intercept e slope. { lin.mod <- lm(data.x[,i] ~ log(data.x[,1], base=10)) #cria o modelo linear dos valores de Ct em função da coluna 1 do data.frame(concentrações de cDNA). coef.vector <- coef(lin.mod) #atribui a um objeto os coeficientes da regressão da rodada(intercept e slope). slp[i] <- coef.vector[2] #armazena no vetor criado anteriormente os valores de slope de cada rodada da função for(). intcpt[i] <- coef.vector[1] #armazena no vetor criado anteriormente os valores de slope de cada rodada da função for(). } slope <- slp[-1] #retira o valor de posição 1 (ocupado por um NA) do vetor slp. intercept <- intcpt[-1] #retira o valor de posição 1 (ocupado por um NA) do vetor intcpt. amplification.efficiency <- 10^(-1/slope) #realiza o cálculo da eficiência de amplifiação. datactrl.x <- x[x[,1] == 0,] #cria um dataframe contendo apenas os valores de cDNA iguais a 0, os quais teoriamente não devem apresentar amplificação. ctrl <- rep(NA, length=ncol(x)) #cria um vetor para armazenar a média dos Ct de cada primer para cDNA=0. for(j in 2:(ncol(x))) #função for() para a média dos valores de Ct de cada primer para cDNA=0. { ctrl[j] <- mean(datactrl.x[,j]) #cálculo da média de Ct de cada primer para cDNA=0. } ctrl.d <- ctrl[-1] #retira o valor da posição 1 (ocupado por um NA) do vetor ctrl. quality.control <- ifelse(ctrl.d <= ct.ctrl, "ok", "check.for.contamination") #testa se a média é maior/menor que o argumento ct.ctrl inserido primer.name <- colnames(data.x[-1]) #cria um vetor com só com os nomes dos primers. output <- data.frame(primer.name, intercept, slope, amplification.efficiency, quality.control) #cria um data.frame com os vetores especificados return(output) #retorma o data.frame criado, como resultado da função. }