我试图运行一个简单的5行命令,但超过9000多个不同的文件。我编写了下面的for循环
setwd("/Users/morandin/Desktop/Test")
output_file<- ("output_file.txt")
files <- list.files("/Users/morandin/Desktop/Test")
for(i in files) {
chem.w.in <- scan(i, sep=",")
pruned.tree<-drop.tip(mytree,which(chem.w.in %in% NA))
plot(pruned.tree)
pruned.tree.ja.chem.w.in <- phylo4d(pruned.tree, c(na.omit(chem.w.in)))
plot(pruned.tree.ja.chem.w.in)
out <- abouheif.moran(pruned.tree.ja.chem.w.in)
print(out)
}嘿,我正在编辑我的问题:上面的代码现在完美地完成了for循环(谢谢您的帮助)。我的输出仍有问题。
我可以通过bash命令使用R重定向整个输出,但是我需要处理文件的名称。我的输出如下:
class: krandtest
Monte-Carlo tests
Call: as.krandtest(sim = matrix(res$result, ncol = nvar, byrow = TRUE),
obs = res$obs, alter = alter, names = test.names)
Number of tests: 1
Adjustment method for multiple comparisons: none
Permutation number: 999
Test Obs Std.Obs Alter Pvalue
1 dt 0.1458514 0.7976225 greater 0.2
other elements: adj.method call是否有方法打印Pvalue结果和文件名称(元素i)??
谢谢
发布于 2014-11-05 07:59:42
由于Paul Hiemstra's answer回答了#1,下面是对#2的回答,假设“应答”指的是“abouheif.moran(pruned.tree.ja.chem.w.in)的打印输出”。
将cat()与参数append = true一起使用。例如:
output_file = "my_output_file.txt"
for(i in files) {
# do stuff
# make plots
out <- abouheif.moran(pruned.tree.ja.chem.w.in)
out <- sprintf("-------\n %s:\n-------\n%s\n\n", i, out)
cat(out, file = output_file, append = TRUE)
}这将生成一个名为my_output_file.txt的文件,其外观如下:
-------
file_1:
-------
output_goes_here
-------
file_2:
-------
output_goes_here显然,格式化完全取决于您;我只是想演示一下这里可以做些什么。
另一种解决方案是对整个脚本进行sink(),但我更愿意明确地说明这一点。中间路线可能是sink()代码的一小部分,但除非在极端情况下,这是一个偏好或风格的问题。
发布于 2014-11-05 07:40:34
我怀疑这里发生的问题是,list.files()默认只返回文件名的列表,而不是文件的整个路径。将full.names设置为TRUE将解决此问题。注意,您不必添加txt,添加文件名,因为list.files()已经返回到现有文件的完整路径。
https://stackoverflow.com/questions/26751850
复制相似问题