如何为同一文件路径中的每个文件分别执行相同的命令集?

时间:2019-03-07 10:48:41

标签: r loops multiple-files

我正在尝试处理从同一文件路径中的多个.grb2文件提取一个子集,并将其写入csv的问题。我可以通过使用以下命令来完成一个(或几个)操作:

GRIB <- brick("tmp2m.1989102800.time.grb2")
GRIB <- as.array(GRIB)
readGDAL("tmp2m.1989102800.time.grb2")
tmp2m.6hr <- GRIB[51,27,c(261:1232)]
str(tmp2m.6hr)
tmp2m.data <- data.frame(tmp2m.6hr)
write.csv(tmp2m.data,"tmp1.csv")

以上命令以csv格式提取特定纬度“ 51”和经度“ 27”以及特定时间范围“ c(261:1232)”的温度值。

现在,我在同一目录中有数百个这些文件(当然,它们具有不同的文件名),并且我想对所有文件都做同样的事情。如您所知,比我更好,我不能一一对应地更改文件名。

我为此付出了很多努力,但是到目前为止,我还没有做到。由于我是R语言的新手,并且我的知识有限,因此,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用普通的for循环:

path <- "your file path here"
input.file.names <- dir(path, pattern =".grb2")
output.file.names <- paste0(tools::file_path_sans_ext(file.names),".csv")
for(i in 1:length(file.names)){
  GRIB <- brick(input.file.names[i])
  GRIB <- as.array(GRIB)
  readGDAL(input.file.names[i]) # edited line
  tmp2m.6hr <- GRIB[51,27,c(261:1232)]
  str(tmp2m.6hr)
  tmp2m.data <- data.frame(tmp2m.6hr)
  write.csv(tmp2m.data,output.file.names[i])
}

您当然可以将for循环的主体创建为一个函数,然后使用purrr中的标准lapplymap函数。

请注意,此代码将打印出不同的CSV文件。如果要将数据附加到单个文件,则应签出write.table