r - 如何以相对方式使用 setwd?

标签 r git

我们的团队在 git 存储库中使用 R 脚本,这些脚本在 Mac 和 Windows(偶尔还有 Linux)机器上由多人共享。这往往会导致在脚本顶部出现一堆非常烦人的行,如下所示:

#path <- 'C:/data-work/project-a/data'
#path <- 'D:/my-stuff/project-a/data'
path = "~/projects/project-a/data"
#path = 'N:/work-projects/project-a/data'
#path <- "/work/project-a/data"
setwd(path)

要运行脚本,我们必须注释/取消注释正确的路径变量,否则脚本将不会运行。这很烦人、不整洁,而且在提交历史中往往也会有点困惑。

在过去,我通过使用 shell 脚本设置相对于脚本位置的目录并完全跳过 setwd 来解决这个问题(然后使用 ./run-scripts.sh 而不是 Rscript process.R), 但由于我们这里有 Windows 用户,所以这行不通。有没有更好的方法来简化 R 中这些困惑的 setwd() 样板文件?

(旁注:在 Python 中,我通过使用路径库来获取脚本文件本身的位置,然后从中构建相对路径来解决这个问题。但是 R 似乎没有办法获取位置运行脚本的文件?)

最佳答案

答案是永远不要使用 setwd()。当然,R 做的事情与 Python 有点不同,但这是它们的共同点。

相反,您正在执行的任何脚本都应该假定它们是从一个公共(public)的顶级根文件夹运行的。当你启动一个新的 R 进程时,它的工作目录(即 getwd() 给出的)被设置为与进程产生的文件夹相同。

举个例子,如果你有这样的布局:

.
├── data
│   └── mydata.csv
└── scripts
    └── analysis.R

您将从 . 运行 analysis.R 并且 analysis.R 将引用 data/mydata.csv作为“data/mydata.csv”(例如,read.csv("data/mydata.csv, stringsAsFactors = FALSE))。 我会保留运行 R 脚本的 shell 脚本或 Makefile,并让 R 脚本假定它们是从 git 存储库的顶层运行的。

这可能看起来像:

cd . # Whereever `.` above is
Rscript scripts/analysis.R

进一步阅读:

关于r - 如何以相对方式使用 setwd?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56629068/

相关文章:

r - 为什么 as.Date 在字符向量上速度很慢?

svn - 将 git-svn 与现有的 svn 项目一起使用

git - 如何在不更改日期的情况下编辑提交作者?

git - 如何恢复几周前丢失的 git 提交?

git - ionic / Cordova : How to install plugin into existing project?

Git rebase 首先 2 Commit

r - 将 R 中 URL 编码的 GET 字符串解析为列表

r - R中上三角矩阵的外函数

r - 如何使用 ECDF 绘制 "Reverse"累积频率图

r - 将新行合并到现有的 xts 中(目的 : to add current stock quote to historical object from quantmod)