【问题标题】:Unable to set working directory using here package in R to another location无法使用 R 中的此处包将工作目录设置到另一个位置
【发布时间】:2019-07-15 14:45:11
【问题描述】:

我有一系列设计为在其他计算机上运行的 R 代码。也就是说,所有代码都相对于一个根目录,其中包含一个 Rstudio 项目文件 .Rproj。没有绝对的文件路径。当我实际打开 Rstudio、加载 .Rproj 文件然后运行代码时,这工作正常。

但是我的一些代码需要几个小时才能运行,而且我需要设置多个脚本一个接一个地运行。这意味着创建一个 .sh 文件,然后从命令行依次运行 R 脚本。但是,我的程序都没有从命令行成功运行,因为根目录不再设置为 .Rproj 文件的根目录。我已经阅读过可以使用 here 包的信息,它会自动将根目录设置为 .here 文件所在的位置。对我来说不是这样。

它自动使用的工作目录是我正在使用的计算集群上的主目录。我的所有文件(包括 .Rproj 和 .here 文件)所在的区域位于不同的目录中,在该目录中分配了更多空间。两者都可以从一个共同的父目录访问,所以我假设 here() 函数能够找到我想要实际用于运行我的工作的目录。但事实并非如此。

实际上,我想将根目录设置为不是我正在使用的系统上的默认根目录的位置。我在那里放了一个 .here 文件,但它不在 here() 函数中,我认为这是它的主要目标。关于如何进行的任何想法?

编辑:我正在使用 UNIX 系统。 R 版本 3.4.2。

【问题讨论】:

    标签: r unix directory rstudio


    【解决方案1】:

    我的问题类似,但与您的问题不完全相同。也许我的解决方案对你有用。当我打开一个 RStudio 项目时,我发现如果我调用“library(here)”,根目录设置在 .Rproj 文件所在的位置,并且“set_here”不会更改该目录,尽管有“here”包文档.也许我做错了什么,但我决定用一个简单的 R 函数来解决这个问题,该函数向上移动目录树,直到找到一个“.here”文件。然后它加载“here”包并将根目录设置在我想要的位置。

    我在 R 外部的终端中使用“touch .here”来设置我的根目录,然后从我新打开的 R 项目中调用“init_here()”:

    init_here <- function() {
      `%!in%` = Negate(`%in%`)
      files <- dir( all.files = T )
      while ( ".here" %!in% files & getwd()!="/" ) {
        setwd("..")
        files <- dir( all.files = T )
      }
      library(here)
    }
    

    用例 - 在 Unix 中:

    cd( '~/myRoot' )
    touch( '.here' )
    

    在 RStudio 中,当我打开一个项目时,调用如下所示:

    R version 4.0.2 (2020-06-22) -- "Taking Off Again"
    < R information removed for clarity >
    
    [Workspace loaded from ~/myRoot/myProject/.RData]
    
    > getwd()
    [1] "/Users/me/myRoot/myProject"
    > init_here()
    here() starts at /Users/me/myRoot
    > here()
    [1] "/Users/me/myRoot"
    > 
    

    我现在可以在我的每个 RStudio 项目的根目录下放置一个“.here”文件,并为每个项目独立设置预期的根目录。如果你想变得花哨,你可以把这个函数放在每个项目的 .Rprofile 中,这样当项目打开时它就会运行。我所有的项目在我的“R”目录上方的目录中都有 .Rproj 文件,所以我的 .Rprofile 看起来像:

    source("./R/init_here.R")
    init_here()
    

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      您是否尝试在 shell 脚本中简单地添加 cd /the/path/where/you/put/the/files 命令?

      根据this documentation,here()“根据加载包时的当前工作目录,使用合理的启发式方法来查找项目的文件”。 shell 脚本中的“cd”(change directory)命令更改当前工作目录。

      【讨论】:

      • 不幸的是,这不起作用。我必须将 cd 放在 shell 脚本的开头,以便它正确定位我希望它运行的 R 脚本,所以它已经是这样了。运行程序的目录(这是我想设置为 R 中根目录的目录的子目录),似乎与 R 中自动设置的工作目录或启发式方法无关来自这里的包。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      • 2012-08-01
      • 1970-01-01
      • 2017-11-16
      相关资源
      最近更新 更多