在R中使用循环输出许多文件

时间:2015-07-20 20:47:03

标签: r loops

我的目标是运行名为" myname.output /"的文件夹中的所有文件。通过循环函数生成多个CSV文件,每个文件都是myname1,myname2 .... etc

这是我到目前为止所拥有的

 sample_d <- list.dirs("myname.output/", recursive = F)


batch_process_samples <- function (sample_d) {
for (file in list.dirs("sample_d", full.names = T)) {    
    writef <- process_s(file)
    write.csv(writef "myname.csv") 
}
}

其中process_s是不同文件中的函数。

然而它不起作用...... 我很确定我可以使用sprintf来创建唯一的文件名,但我不确定如何, 谢谢!

更多信息:如果我运行它分配给变量,该函数只是变量空出来,但没有R错误。

3 个答案:

答案 0 :(得分:0)

您的问题对我来说有点不清楚,但听起来您无法为每次迭代获取唯一的输出文件名。您可以使用basename函数在每次迭代中删除输入文件的相对路径,然后只需粘贴一个新的前缀,如下所示:

write.csv(writef, file=paste("processed_",basename(file),sep=''))

答案 1 :(得分:0)

也许这会引导你前进。

问题#1是list.dirs()中的第一个参数是一个硬编码字符串&#34; sample_d&#34; 而不是变量 sample_d

问题#2是 process_s 可能是我没有的一些功能,因此无法直接帮助。所以我通过附加&#34; XX&#34;

sample_d <- list.dirs("myname.output/", recursive = F)

batch_process_samples <- function (sample_d) {
    for (file in list.dirs(sample_d, full.names = T)) { # <== Problem #1 here   
    writef <- paste0(file, "XX")                   #   <== Problem #2 here 
  print(writef)                                    #   <== results out 
    }
}

batch_process_samples(sample_d)

答案 2 :(得分:0)

您可以使用粘贴创建唯一的文件名。这对我有用:

sample_d <- list.files("myname.output/", recursive=F)

i <- 0
batch_process_samples <- function(file_list) {
  for(file in file_list) { 
    i++
    writef <- data.frame(read.csv(file))
    write.csv(writef, file = paste0("myname",i,".csv"))
  }
}

batch_process_samples(sample_d)

如果您正在阅读文件,则您需要list.files()而不是list.dirs()