2 votes

Ecrire un tableau en utilisant une variable en boucle dans une boucle for

J'ai une question très stupide. Elle a déjà été posée, mais aucune des solutions proposées ne semble me convenir. Je boucle sur une liste contenant différents cadres de données, pour effectuer une analyse et enregistrer un fichier de sortie nommé différemment pour chaque cadre de données d'entrée. Le nom serait quelque chose comme nom original_sortie.txt. J'ai écrit ce morceau de code qui semble fonctionner correctement (il effectue toutes les analyses de la bonne manière), mais il donne une erreur lorsqu'il arrive à la partie write.table.

library(qqman)
library(QuASAR)

list_QuASAR <- list (Fw, Rv, tot) #all of the are dfs

for (i in list_QuASAR){
  output <- fitQuasarMpra(i[,2], i[,3], i[,4])
  print(sum(output$padj_quasar<0.1))
  qq(output$pval3, col = "black", cex = 1)
  write.table(output, paste0("quasar_output/", i, "_output.txt"), col.names = T, sep = "\t")
}

fitQuasarMpra est une fonction d'un paquet appelé QuASAR. Bien sûr, le sous-répertoire appelé quasar_output existe déjà.

L'erreur que je reçois est la suivante :

Error in file(file, ifelse(append, "a", "w")) : 
  invalid 'description' argument
In addition: Warning message:
In if (file == "") file <- stdout() else if (is.character(file)) { :
  the condition has length > 1 and only the first element will be used

Je sais que c'est un problème trivial mais je suis actuellement coincé. Je peux envisager de changer et d'utiliser lapply, mais je risque alors de rencontrer le même problème et je voulais d'abord le résoudre. Merci beaucoup pour votre aide.

4voto

joran Points 68079

Vous essayez d'utiliser un objet data frame ( i ) comme partie d'un nom de fichier ; c'est-à-dire la trame de données elle-même, et non son nom. Vous pouvez essayer d'itérer sur une liste nommée à la place :

list_QuASAR <- list (Fw = Fw,Rv = Rv,tot = tot)

for (i in names(list_QuASAR)){
  output <- fitQuasarMpra(list_QuASAR[[i]][,2], list_QuASAR[[i]][,3], list_QuASAR[[i]][,4])
  print(sum(output$padj_quasar<0.1))
  qq(output$pval3, col = "black", cex = 1)
  write.table(output, paste0("quasar_output/", i, "_output.txt"), col.names = T, sep = "\t")
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X