【问题标题】:Write.table using looped variable in a for loop在 for 循环中使用循环变量的 Write.table
【发布时间】:2019-12-19 04:43:19
【问题描述】:

我有一个非常愚蠢的问题。已经有人问过了,但提供的解决方案似乎都不适用于我。 我正在循环包含不同数据帧的列表,以执行分析并为每个输入数据帧保存一个不同名称的输出文件。名称类似于 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,但是我可能会遇到同样的问题,我想先解决这个问题。 非常感谢您的帮助。

【问题讨论】:

    标签: r


    【解决方案1】:

    您正在尝试使用数据框对象 (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")
    }
    

    【讨论】:

    • 谢谢!这按预期工作。不幸的是,我仍然是初学者,我错过了一些像这样的基本知识......
    • 艾伦,当有人为您的问题提供可接受的解决方案时,我建议您accept the answer;这样做不仅为回答者提供了一些积分,而且还为有类似问题的读者提供了一些关闭。虽然您只能接受一个答案(当提供了多个答案时),但您可以选择对您认为有帮助的人投票。
    猜你喜欢
    • 1970-01-01
    • 2013-08-13
    • 2019-09-27
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    相关资源
    最近更新 更多