如何在R中动态获取文件夹和文件路径

How to get folder and file path dynamically in R

我有一个项目文件夹,名称为 project。结构如下所示

project
    dataset
    output
    scripts

现在,我想从 dataset 文件夹中提取 read 文件并在 output 文件夹中提取 write 文件。我所有的代码都在 scripts 文件夹中。

我可以使用硬编码路径样式来完成,例如,

df_1 <- read.csv(~project/dataset/test.csv)
df_2 <- write.csv(~project/output/test_output.csv)

这(硬编码)导致问题。如果我 运行 来自另一个设备的代码或者如果另一个人想要 运行 在 his/her 设备中编码,那么他们需要手动更改路径。

有什么方法可以写代码,不用人手动改路径地址吗?

习惯上启动相对于访问数据的路径的脚本。

例如,您可以在您的终端中执行如下操作:

cd path/to/data
Rscript path/to/script.r

这会将工作目录设置为 path/to/data,要在 R 中访问此数据,您现在可以简单地使用相对路径:

df_1 <- read.csv('dataset/test.csv')
write.csv(df_1, 'output/test_output.csv')

如果您不想通过终端打开 R,Sys.info() 提供了您可以在此处利用的数据。 Sys.info()["user"] 提供当前 R 用户的 ID,因此您可以像这样在文件顶部设置工作目录:

if(Sys.info()["user"] == "User 1") {
  setwd("[User 1's directory]")
} else if(Sys.info()["user"] == "User 2") {
  setwd("[User 2's directory]")
}

然后,一旦您将工作目录设置为跨用户的同一位置,您就可以使用相同的文件名。您还可以像这样动态地设置完整的 filenames/paths 而不会弄乱工作目录(这在某人在 PC 上而另一个人在 mac 上时特别有用,因为斜杠的工作方式不同)。