here::here函数在查找工作目录路径时不一致

polhcujo  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(139)

我使用R和here包将图保存到当前工作目录中的一个文件中,如下所示:

save(plot1,
     file = here::here("out2.rda"))

我的工作目录和项目的源文件位置是我的Google Drive文件夹中的一个子文件夹。我的工作目录是那个子文件夹,我通过运行setwd()和适当的文件路径来检查这一点。
然而,有时here::here("out2.rda")不保存到该文件夹,而是保存到我的电脑上的文档文件夹。其他时候它工作正常,并保存到我的谷歌驱动器中所需的文件夹。我不明白为什么它只在有时工作。

我如何确保它始终有效?

z4bn682m

z4bn682m1#

here::here()决定了package load time上的工作目录/项目根目录。因此,如果在library(here)或包中的任何函数之前调用here::here(),则setwd()只会影响由here::here()决定的项目根目录。您的脚本中是否有library(here)调用?是否可能您有时从不同的位置启动R会话(通过命令行或RStudio)?后者将影响R会话的工作目录。
我建议在你的项目的根目录下有一个.Rproj文件(在你的例子中是Google Drive文件夹的子目录)。如果你在Rstudio中工作,你可以直接打开.Rproj文件,这将设置正确的工作目录。这里的包也将使用.Rproj文件来定位当前的工作目录,前提是你从包含项目文件的文件夹或它的子文件夹启动R会话。
我还可以推荐this blog post,它很好地解释了面向项目的工作流。

相关问题