0

我编写了一个 R 脚本,该脚本将用作基于 shell 脚本的管道的一部分,该管道将一个接一个地将包含基因序列数据的数十个文件提供给 R 脚本(使用args[])。

我无法找到将每次运行此脚本的结果写入单个结果文件的方法。我认为最简单的方法可能是创建一个空的 results.csv 表,然后在每次运行时要求脚本写入该文件的下一行(节省了脚本直接在文件上写入的问题每次运行)。在这种情况下,一位朋友帮助我编写了以下代码:

x<-readLines("results.csv")

if(x[[1]]==""){x[[1]]<-paste("meancoscore", "meanboot", "CIres", "RIres", "RC",  "nodecount", sep= ",")}

x[[length(x)+1]]<-paste(meancoscore, meanboot, CIres, RIres, RC, nodecount, sep = ",")
x<-data.frame(x)
write.table(x,"results.csv", row.names = F, col.names = F, sep = ",")

在上面的代码中,如果数据帧的第一行没有任何内容,则首先使用“meancoscore”、“meanboot”、“CIres”、“RIres”、“RC”和“nodecount”作为标头。

在此之后,结果(对象:meancoscore、meanboot、CIres、RIres、RC 和 nodecount 被写入与其标题对应的列中。这里的想法是,如果您使用不同的源文件再次运行 R 脚本,它应该简单地写入结果到 results.csv 文件中的下一行。

但是,在使用不同的输入文件运行此代码三次后,在 results.csv 文件中可以看到以下内容:

"\""\\""meancoscore,meanboot,CIres,RIres,RC,nodecount\\""\""
""\""\\""0.000,76.3247863247863,0.721002252252252,0.983235214508053,0.708914804154032,117\\""\""
""\""0.845,77.6923076923077,0.723259762308998,0.983410513459875,0.711261254217159,117\""
""0.85,77.4358974358974,0.728886344116805,0.983878381369061,0.717135516451654,117"

我想要的结果如下:

meancoscore,meanboot,CIres,RIres,RC,nodecount
0.000,76.3247863247863,0.721002252252252,0.983235214508053,0.708914804154032,117
0.845,77.6923076923077,0.723259762308998,0.983410513459875,0.711261254217159,117
0.85,77.4358974358974,0.728886344116805,0.983878381369061,0.717135516451654,117

值得注意的是,每一次接连出现的乐趣似乎都在为 results.csv 文件添加更多的反斜杠和更多的引号。

理想情况下,我希望能够在完成时简单地读取 results.csv 文件,并通过访问列来分析数据,results$meanboot例如summary(results$meanboot)

任何人都可以就如何修改上述代码或提供替代解决方案提供一些建议吗?

我应该在这里补充一点,我故意没有选择在 R 脚本中写入一个循环,该循环将遍历感兴趣的输入文件并简单地将完整的结果表组装为一个对象(我知道这将是非常写出来很简单)。这是因为这个脚本所做的工作将被外包给集群中的多台机器。

感谢您抽出宝贵的时间以及您可能提供的任何帮助。

4

1 回答 1

0

根据voidHead 的怀疑,通过添加调用quote = FALSE解决了该问题。write.table()

于 2014-09-26T09:29:40.557 回答