我的目标是运行名为" 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错误。
答案 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()
。