我正在尝试运行一个简单的5行命令但超过9000个不同的文件。我为循环编写了以下内容
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循环(感谢您的所有帮助)。我仍然遇到输出问题。
我可以使用R通过bash命令重定向整个输出,但我需要处理文件的名称。我的输出如下:
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)??
由于
答案 0 :(得分:2)
我怀疑这里出现的问题是list.files()
默认情况下会返回仅包含文件名称的列表,而不是文件的完整路径。将full.names
设置为TRUE
可解决此问题。请注意,您不必添加txt
添加文件名,因为list.files()
已经返回现有文件的完整路径。
答案 1 :(得分:2)
由于Paul Hiemstra's answer回答#1,所以这里是对#2的回答,假设通过&#34;回答&#34;你的意思是&#34; abouheif.moran(pruned.tree.ja.chem.w.in)
&#34;。
将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()
的一小部分代码,但除非在极端情况下,这是一个偏好或风格问题。