运行 R 脚本与 Ubuntu 服务器中的数据在不同的文件夹中

Run R script in different folder than data in Ubuntu Server

我在一个目录中有一个 R 脚本,它接收不同目录中的文件,将它们组合成一个文件,并输出一个新的 excel 文件,如下所示:

first <- read_excel("file1.xlsx")
second <- read_excel("file2.xlsx")
third <- read_excel("file3.xlsx")

df <- bind_rows(first,second,third)
openxlsx::write.xlsx(df, "newfile.xlsx")

在我的代码中,我可以将工作目录设置为一个特定的文件夹,只需放入 setwd("path/to/data") 但这仅适用于一个目录。我想制作一个 shell 脚本,我可以在其中循环遍历各种文件夹。

我想试试

for i in folder1,folder2,folder3
do
  # Run Rscript myRscript.R in each folder
done

例如。文件夹 1 有 file1、file2 和 file3。文件夹 2 有 file1、file2 和 file3。文件夹 3 有 file1、file2、file3。我希望 Rscript 是每个文件夹中文件夹和 运行 的一个目录,并为每个文件夹生成一个“newfile.xlsx”文件(每个文件夹是一组不同的数据,但具有所有每个文件夹内的文件名相同)

我想避免将一个版本的 Rscript 复制到每个文件夹中,以避免文件夹更改我的请求的性质。这可能吗?

您可以使用 R 循环遍历文件夹和文件。

folders <- list.dirs()

for (folder in folders) {
  files <- list.files(folder)
  
  # extra: neglect non xlsx files
  # files <- files[which(str_detect(files, ".xlsx$"))]
  
  df <- tibble()
  
  for (file in files) {
    temp <- read_excel(file)
    df <- bind_rows(df, temp)
  }
  
  # creates a newfile.xlsx in each folder
  openxlsx::write.xlsx(df, file.path(folder, "newfile.xlsx"))
  
  # alternative: creates the newfile in the main folder
  # openxlsx::write.xlsx(df, paste0(folder, "_newfile.xlsx"))
}