0

我最近买了一台新电脑,并将我所有的工作文件都移到了它上面。主要问题是文件结构与我以前的计算机略有不同。因此,为了让我的 R 代码正常工作,我需要更改setwd()每个文件的路径。有没有一种有效的方法来做到这一点?或者是否有更有效的最佳实践来设置目录或将文件读入 R?

4

2 回答 2

1

我强烈推荐这里的包。setwd()与受本地使用和路径约束的R 文件相比,组织、查找、读取和协作/跨 R 文件的效率更高。

于 2021-09-20T16:33:01.727 回答
0

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上面定义的命令并替换每次使用setwdusing 代码,如下所示:

myproj_path1 <- getOption("MYPROJ_PATH1")
setwd(myproj_path1)

此外,如果项目中的所有内容都可以放在单个目录树中,您也可以简化事情,在这种情况下,您可以只更改树的根并将所有其他目录保持为固定的相对路径偏移量,这些偏移量在移动到时不会改变另一台电脑。因此,每次移动时只需更改一个根目录。

root <- getOption("MYPROJ_ROOT")
path1 <- file.path(root, "relative_path1")
path2 <- file.path(root, "relative_path2")

较小的项目通常可以做到这一点,但如果有几个项目共享资源,这可能是不可能的。例如,您可能有一个共享的数据库目录和其他不共享的目录。无论如何,您可以尝试通过将相对路径固定到可行的程度并且仅更改根来尽可能地减少根路径的数量。

于 2021-09-20T16:27:22.580 回答