【问题标题】:Best practices for setting working directory in R在 R 中设置工作目录的最佳实践
【发布时间】:2021-01-20 12:23:32
【问题描述】:

R 的相对新手,想知道以下场景的最佳实践(或实用建议)。我有一个类似于以下的目录结构,其中包含一些需要拉入的 R 脚本和数据:

~/project/
├───src/
│   ├───01_metrics.R
│   ├───02_other.R
├───data/
│   ├───some_data.db
│   ├───some_other_data.tsv
├───output_plots/
...

在 R 脚本中,我使用以下方法提取数据:

library(tidyverse)
conn <- DBI::dbConnect(RSQLite::SQLite(), "../data/some_data.db")
sometable <- tbl(conn, "sometable")

这假设当我运行Rscript ./01_metrics.R 时,我是从src 目录中执行的。有时我会忘记并无意中从父文件夹 (Rscript src/01_metrics.R) 运行它。

有没有更健壮的方法来编码 R 脚本中的 dataoutput_plots 目录的路径?为了可移植性,我不热衷于在完整路径中编写代码。我可以在每个脚本的开头调用setwd(),但我想知道这是否是最好的解决方案。

其他人会怎么做,因为这不可能是一个小众问题?

PS:我没有使用 RStudio(我更喜欢 vim);我知道可以为 Rproj 设置基本目录。

【问题讨论】:

  • 你可以查看“这里”包,
  • 谢谢,这看起来是最好的解决方案。愿意将其发布为答案,我可以将其标记为已接受?

标签: r


【解决方案1】:

感谢 user12256545 将此作为评论发布。

解决方案是here 包。在src/01_metrics.R 中,您可以定义此脚本相对于项目根目录的位置:

here::i_am("src/01_metrics.R")
library(here)

然后,使用here(),所有路径都可以相对于项目根目录:

library(tidyverse)
conn <- DBI::dbConnect(RSQLite::SQLite(), here("data", "some_data.db"))
sometable <- tbl(conn, "sometable")

如果您的项目根目录中有一个.Rproj 文件,那么here() 可以使用它来定义项目根目录,而无需显式调用here::i_am();这些启发式的更多细节在documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-15
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多