gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 13:31:53 26 4
gpt4 key购买 nike

我们的团队在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com