R循环打开文件

时间:2014-11-05 07:33:23

标签: r

我正在尝试运行一个简单的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)??

由于

2 个答案:

答案 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()的一小部分代码,但除非在极端情况下,这是一个偏好或风格问题。