在for循环中使用循环变量的Write.table

时间:2019-08-12 15:20:12

标签: r

我有一个非常愚蠢的问题。已经有人问过了,但是提供的解决方案似乎都不适合我。 我正在遍历包含不同数据帧的列表,以执行分析并为每个输入数据帧保存不同名称的输出文件。名称将类似于originalname_output.txt。 我写了这段代码,看起来似乎很好(以正确的方式进行了所有分析),但是在进入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是称为QuASAR的软件包的功能。当然,名为quasar_output的子目录已经存在。

我得到的错误是:

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

我知道这是一个微不足道的问题,但是我目前陷入困境。我可能会考虑切换并使用lapply,但随后可能会遇到相同的问题,因此我想先解决此问题。 非常感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

您正在尝试使用数据框对象(i)作为文件名的一部分;即数据框本身,而不是其名称。您可以尝试遍历命名列表:

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")
}