我有一系列的R代码,这些代码旨在在其他计算机上运行。也就是说,所有代码都相对于一个根目录,该根目录包含一个Rstudio项目文件.Rproj。没有绝对文件路径。当我实际打开Rstudio,加载.Rproj文件然后运行代码时,此方法工作正常。
但是,我的某些代码要花几个小时才能运行,因此我需要设置多个脚本才能一个接一个地运行。这意味着创建一个.sh文件,然后从命令行依次运行R脚本。但是,我的程序都无法从命令行成功运行,因为根目录不再设置为.Rproj文件的根目录。我已经阅读了有关可以使用here包的信息,它将自动将根目录设置为.here文件所在的位置。对我来说不是这种情况。
它自动使用的工作目录是我正在使用的计算群集上的主目录。我所有文件(包括.Rproj和.here文件)所在的区域位于另一个目录中,在该目录中我分配了更多空间。两者都可以从公共父目录访问,因此我假设here()函数将能够找到我想实际用于运行工作的目录。但是事实并非如此。
有效地,我想将根目录设置为一个位置,该位置不是我使用的系统上的默认根目录。我在这里放置了一个.here文件,但是这里并没有位于here()函数,这是它的主要目标。有关如何进行的任何想法?
编辑:我正在UNIX系统上工作。 R版本3.4.2。
答案 0 :(得分:0)
您是否尝试在shell脚本中简单地添加一个cd /the/path/where/you/put/the/files
命令?
根据this documentation,here()“使用合理的启发式方法,根据加载包时的当前工作目录来查找项目的文件”。 Shell脚本中的“ cd”( c hange d irectory)命令可更改当前工作目录。
答案 1 :(得分:0)
我的问题与您的相似,但不完全相同。也许我的解决方案对您有用。当我打开一个RStudio项目时,我发现如果我调用“ library(here)”,则将根目录设置为.Rproj文件所在的位置,尽管“ here”软件包文档中的“ set_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()
希望有帮助。