运行 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"))
}
我在一个目录中有一个 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"))
}