【问题标题】:using a loop in R to output many files在 R 中使用循环输出许多文件
【发布时间】:2015-07-20 20:47:02
【问题描述】:

我的目标是通过循环函数运行名为“myname.output/”的文件夹中的所有文件,以生成多个 CSV 文件,每个文件分别为 myname1、myname2 .... 等

这就是我目前所拥有的

 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 错误。

【问题讨论】:

  • 另外,我认为这只是您写问题时的拼写错误,但您在 write.csv 行中缺少逗号。

标签: r loops


【解决方案1】:

您的问题对我来说有点不清楚,但听起来您在为每次迭代获取唯一的输出文件名时遇到了麻烦。您可以使用basename 函数在每次迭代中从输入文件中删除相对路径,然后像这样粘贴一个新前缀:

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

【讨论】:

    【解决方案2】:

    也许这会指引你前进。

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

    问题 #2 是 process_s 可能是我没有的一些功能,因此无法直接提供帮助。所以我通过在文件名后面加上“XX”来创建一个玩具处理示例

    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)
    

    【讨论】:

      【解决方案3】:

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

      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()

      【讨论】:

        猜你喜欢
        • 2011-08-11
        • 1970-01-01
        • 2018-03-23
        • 1970-01-01
        • 2020-01-30
        • 2021-04-21
        • 2020-08-03
        • 2023-03-11
        • 1970-01-01
        相关资源
        最近更新 更多