运行 目录中所有文件的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。
输入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。