运行 目录中所有文件的R代码并在单独目录中输出所有文件

Run R code for all files in a directory and output all files in a separate directory

输入csv文件是input1 input2 input3....最多input50。现在这些文件中的每一个都有 R 代码 运行,并且相应的 csv 输出是 output1、output2、output3,...直到 output50。是否存在一些 R 函数或 R 包或 R 代码,然后开始将其一个一个地归档,并在应用一些 R 操作后,在分隔文件夹中生成相应的输出(一个一个地)。

假设您有一个函数 ProcessCSV 来处理一个 CSV 文件,给定它的名称:

ProcessCSV=function(fileName) {
   df=read.csv(fileName)
   #your code to process data in data.frame
   write.csv(df, file=paste('output_',filename,collapse='',sep=''))
}

然后,您需要通过手动填写文件名来创建文件列表:

files=list(paste('input', 1:50, '.csv', sep=''))

或通过列出某个目录中的所有文件:

files=list(list.files(path=".", recursive=T, pattern='.csv'))

之后,使用 do.call 函数为列表中的每个条目(第二个参数)调用第一个参数中的函数:

do.call(ProcessCSV, files)

它会是这样的:

# set working directory to folder with input .csv files
setwd(input_dir)
# get a list of files
input_files <- list.files(input_dir, pattern = "[.]csv")

# loop for reading input and writing an output
for(i in 1:length(input_files)){
  df0 <- read.csv(input_files[i])
  df <-  ... do some operation on df0 ...
  write.csv(df, file = file.path(output_dir, paste0("output", i)))
}

编辑: 用于循环修正,感谢 Chetan Arvind Patil。