【问题标题】:Is there a way to change all the directory path for all R files?有没有办法更改所有 R 文件的所有目录路径?
【发布时间】:2021-09-20 16:02:38
【问题描述】:

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

【问题讨论】:

  • 读取文件时只需包含路径。或者将所有需要的文件放到一个文件夹中使用
  • 这更像是一个文件管理/组织问题,而不是一个特定的 R 编程问题。这将取决于您喜欢的工作方式以及您希望将文件保存在计算机上的哪个位置的个人偏好
  • Jenny Bryan 的 here 软件包遵循了一些关于文件管理的理念。

标签: r directory setwd


【解决方案1】:

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

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

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")

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

【讨论】:

    猜你喜欢
    • 2012-06-27
    • 2011-12-23
    • 1970-01-01
    • 2020-12-09
    • 2015-09-16
    • 2019-11-07
    • 2020-04-16
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多