J'essaie d'améliorer la vitesse d'une boucle de test t pour une trame de données.R: amélioration de la vitesse du test t pour chaque ligne d'une trame de données
J'ai un grand cadre de données (~ 15000 lignes et 205 colonnes). Chaque colonne est une cellule et chaque ligne est un gène. Je peux regrouper les colonnes en 2 groupes en fonction de leur identité fournie dans une autre table de référence.
Voici la boucle que je l'ai écrit:
for (i in 1:nrow(EC)){
ttest_result[i,2] <- rowMeans(EC)[i]
ttest_result[i,3] <- rowMeans(CP)[i]
ttest_result[i,4] <- (ttest_result[i,2] - ttest_result[i,3])
ttest_result[i,5] <- (ttest_result[i,2]/ttest_result[i,3])
ttest_result[i,6]<- t.test(EC[i,],CP[i,], var.equal = TRUE)$p.value
pb$tick()
}
Cette boucle me oblige à diviser la trame de données d'origine en 2 trames de données basées sur les identités des colonnes. Cependant, cette boucle prend plus de 45 minutes à compléter.
Je me demande si vous avez tous des suggestions sur ce que je peux faire différemment? Comment puis-je utiliser des fonctions d'application pour améliorer la vitesse?
Merci beaucoup!
Si toutes les colonnes sont numériques, le convertir en une matrice. Les opérations de lignes sur un data.frame sont incroyablement lentes. Vous feriez même un peu mieux si vous transposez la matrice et opérez sur les colonnes plutôt que sur les lignes. – lmo