R循环打开文件

R循环打开文件,r,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

我试图运行一个简单的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)
}
是否有打印Pvalue结果和文件名(元素i)的方法


谢谢

我怀疑这里的问题在于默认情况下,
list.files()
只返回文件名的列表,而不是文件的整个路径。将
full.names
设置为
TRUE
将解决此问题。请注意,您不必添加
txt
添加文件名,因为
list.files()
已经返回到现有文件的完整路径。

我怀疑这里的问题是
list.files()
默认情况下只返回文件名的列表,而不是文件的完整路径。将
full.names
设置为
TRUE
将解决此问题。请注意,您不必添加
txt
添加文件名,因为
list.files()
已经返回到现有文件的完整路径。

既然回答了#1,这里是对#2的回答,假设“answers”是指“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)
}
显然,格式完全取决于您;我只是想展示一下这里可以做些什么

另一种解决方案是
sink()。中间道路可能只是一小段代码,但除非在极端情况下,这是一个偏好或风格的问题。

既然回答了#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)
}
显然,格式完全取决于您;我只是想展示一下这里可以做些什么


另一种解决方案是
sink()。中间路线可能是
sink()
只是代码的一小部分,但除非在极端情况下,这是一个偏好或风格的问题。

文件名和文件扩展名之间不需要
文件
是什么样子的?尝试将其更改为
paste(i,“txt”,sep=“.”)
但当它们来自
list.files
时,它们可能已经有扩展名了。您可以在loop@koundy假设当前工作目录为
/Users/morandin/Desktop/Test
。默认情况下,
list.files()
不会返回完整路径。@Paul您完全正确。我错过了那部分。文件名和文件扩展名之间不需要一个
文件
是什么样子的?尝试将其更改为
paste(i,“txt”,sep=“.”)
但当它们来自
list.files
时,它们可能已经有扩展名了。您可以在loop@koundy假设当前工作目录为
/Users/morandin/Desktop/Test
。默认情况下,
list.files()
不会返回完整路径。@Paul您完全正确。我错过了那一部分。为了完整性:
(文件中的错误(文件,“rt”):无法打开连接)
只是说“
文件
未找到”的丑陋方式。为了完整性:
(文件中的错误(文件,“rt”):无法打开连接)
只是说“
文件
未找到”的丑陋方式。如果数据允许,我认为将循环结果放入
data.frame
中,并使用
write.table
保存循环结果是最好的方法。这使得以后读入R或任何其他工具都更加容易。非常感谢,我实际上已将sprintf函数转换为只获取Pvalue并以某种方式进行管理@用户3188922在这种情况下,我建议采用
write.table
方法进行移植。如果数据允许,我认为将循环结果放入
data.frame
中,并使用
write.table
保存是最好的方法。这使得以后读入R或任何其他工具都更加容易。非常感谢,我实际上已将sprintf函数转换为只获取Pvalue并以某种方式进行管理@user3188922在这种情况下,我建议采用
write.table
方法实现可移植性
-------
file_1:
-------
output_goes_here

-------
file_2:
-------
output_goes_here