【问题标题】:How to get folder and file path dynamically in R如何在R中动态获取文件夹和文件路径
【发布时间】:2021-06-07 16:56:36
【问题描述】:

我有一个项目文件夹,名称为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)

这(硬编码)会导致问题。如果我从其他设备运行代码,或者如果其他人想在他/她的设备上运行代码,那么他们需要手动更改路径。

有没有什么办法可以写代码,这样人家就不用手动改路径地址了?

【问题讨论】:

    标签: r path


    【解决方案1】:

    通常会相对于访问数据的路径启动脚本。

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

    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')
    

    【讨论】:

    • 感谢您的回答。但是,我想在我的脚本中做任何事情。因为我必须使用 bash 脚本运行代码。所以,我需要从我的代码中获取目录。
    • @Opps_0 你能解释一下我的问题没有以什么方式回答吗?我展示的第一段代码会启动您的 R 代码,并且是有效的 Bash 脚本。
    • 说,我有一个 bash 脚本包含此代码 #!/bin/bash python3 a.py Rscript myscript1.r。那么我应该在哪里写cd path/to/data 在我的bash 中?抱歉,我是 bash 新手!
    • @Opps_0 您可以将它写在RScript 部分之前的一行中。但这并不能真正解决你的问题,它只是将它从 R 转移到 Bash。相反,这段代码根本不应该是你的 Bash 脚本(或 R 脚本)的一部分用户在执行你的代码之前设置工作目录(通过运行cd …)。
    • 我必须用我的文件夹路径更改这个cd path/to/data吗?
    【解决方案2】:

    如果您不想通过终端打开 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]")
    }
    

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

    【讨论】:

    • 我必须从 bash 脚本运行我的代码。
    • 我对 bash 不熟悉,怎么会导致这个解决方案不起作用?
    • 您发布的代码仍然是硬编码用户名。它也没有真正做任何有用的事情:它可以替换为setwd('~')。并且使用setwd 也是不必要的——如果这是目的,只需在路径中引用~(尽管所有这些解决方案仍然在某种程度上对路径进行硬编码)。
    • 如果文件路径中除了主目录之外还有更多差异,这很有用
    • 诚实吗?不,它没有用。它仍然在代码中硬编码机器细节,这是不属于的。在所需位置运行代码是用户的责任。
    猜你喜欢
    • 2021-08-29
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 2010-10-14
    • 2014-11-05
    • 2018-07-15
    相关资源
    最近更新 更多