1) 如果在setwd 命令中设置了所有路径,那么第一步定义您自己的setwd,检查参数是否为旧路径,如果是,则将其替换为新的一个。否则软件不需要更改。所以可以很快完成。
setwd <- function(dir) {
if (dir == "oldpath1") dir <- "newpath1"
else if (dir == "oldpath2") dir <- "newpath2"
# etc
base::setwd(dir)
}
2) 为了将来也解决这个问题,而不是上面的,将路径定义为选项并将它们放在您的 .Rprofile 文件中。
setwd <- function(dir) {
if (dir == "oldpath1") dir <- getOption("MYPROJ_PATH1")
else if (dir == "oldpath2") dir <- getOption("MYPROJ_PATH2")
# etc
base::setwd(dir)
}
在您的 .Rprofile 中
options(MYPROJ_PATH1 = "...whatever...")
options(MYPROJ_PATH2 = "...whatever...")
# etc
然后,如果您再次移动计算机或出于任何原因更改路径,那么只需在 .Rprofile 中设置选项即可。
这样做的另一个好处是,如果您忘记了事情在哪里,例如当您返回一段时间未从事的项目时,所有项目的关键路径都位于您的 .Rprofile 中。
.Rprofile 通常位于此 R 命令显示的路径中
path.expand("~/.Rprofile")
但可以放置在?Startup 中讨论的某些其他位置。
3)随着时间的推移,您可能希望删除上面定义的setwd 命令并使用如下代码替换每次使用的setwd:
myproj_path1 <- getOption("MYPROJ_PATH1")
setwd(myproj_path1)
此外,如果项目中的所有内容都可以放在单个目录树中,那么您也许可以简化事情,在这种情况下,您可以只更改树的根并将所有其他目录保持为固定的相对路径偏移量,不会改变在移动到另一台计算机。因此每次移动时只需要更改一个根目录。
root <- getOption("MYPROJ_ROOT")
path1 <- file.path(root, "relative_path1")
path2 <- file.path(root, "relative_path2")
较小的项目通常可以做到这一点,但如果有多个项目共享资源,这可能是不可能的。例如,您可能有一个共享的数据库目录和其他不共享的目录。无论如何,您可以尝试通过将相对路径固定到可行的程度并仅更改根来尽可能减少根路径的数量。