不久前,我正在阅读一篇关于改进项目工作流程的文章。建议不要使用setwd,否则我的电脑会烧毁:
如果 R 脚本的第一行是
setwd("C:\Users\jenny\path\that\only\I\have")
我会进入你的办公室并点燃你的计算机。
我开始使用这个here包,它运行得很好,直到我开始使用cronR. 问完这个问题后,我的笔记本电脑再次受到纵火威胁:
如果你的 #rstats 脚本的第一行是 wd <- here(),我将进入你的实验室并点燃你的计算机。
由于担心笔记本电脑的安全,我开始使用答案中建议的方法来获取相对文件路径:
wd <- Sys.getenv("HOME")
wd <- file.path(wd, "projects", "my_proj")
Run Code Online (Sandbox Code Playgroud)
这对我有用,但对与我一起工作但没有相同projects目录的人不起作用。所以现在我很困惑。获取相对文件路径以便项目可以移植的最安全/最好的方法是什么?
有很多方法可以组织 R 中使用的代码和数据。鉴于 OP 中描述的“纵火犯”已经拒绝了至少两种在 R 脚本中定位项目文件的方法,下一步最好是询问纵火犯如何他/她执行此功能,并相应地调整您的代码和文件结构。
更新:由于“纵火犯”似乎是在 Tidyverse.org 上写作的人(请参阅 OP 中的 Tidyverse 文章)以及 SO 上的答案(请参阅 OP 中的其他链接),因此您的计算机似乎相对安全。
如果您正在共享代码或使用批处理执行代码,其中“用户”是您以外的其他人,则一种有用的方法是将代码、数据和配置置于版本控制之下,并开发一个运行手册来解释其他人如何检索代码组件并在另一台计算机上执行它们。
正如 OP 的评论中所指出的,here::here()如果可以通过操作手册中的文档使其使用可靠,那么就没有什么问题。
我将所有 R 代码构建到RStudio 中的项目中,这些项目被组织到一个gitrepositories目录中。所有项目都可以作为该gitrepositories目录的子目录进行访问。如果我需要共享项目,我会让 GitHub 上的其他用户可以访问该项目。
在我的 R 代码中,我将外部文件引用为项目根目录中的子目录,例如./data/gen01.csv.