【问题标题】:Sourcing in Rprofile.site: How to find the location of the sourced file在 Rprofile.site 中采购:如何找到源文件的位置
【发布时间】:2017-11-22 14:54:57
【问题描述】:

我有一个 R 的“复制部署”安装,没有设置 R 特定的环境变量。

我想从Rprofile.site 中获取文件:

source("how/to/find/this/file/my_settings.R")

我可以将我的my_settings.R 文件放在哪里,以便无论Rprofile.site 安装在哪个路径中,都可以在Rprofile.site 中找到它?

顺便说一句:我想避免使用my_settings.R 的绝对路径,这确实可行。我更喜欢使用与 Rprofile.site 相同的文件夹或相对于它的路径来支持 R 的复制部署。

编辑 1:问题在于 getwd 总是不同,具体取决于您启动 R 的当前文件夹

【问题讨论】:

  • 如果您在计划编写source 指令的地方键入print(getwd()),您应该会得到这个位置
  • 我已经尝试过getwd(),但路径似乎不稳定(至少在 RStudio 中不稳定 - 如果重新启动 R 会话,则取决于当前打开的项目)
  • 您是否尝试将此行写入您的 Rprofile 文件或在会话打开之后?如果是前者,则意味着在读取 Rprofile 之前设置了项目目录。你也可以使用.libPaths()[1].libPaths()[2],前提是你以后不打算搞这些。在我的电脑上,我可以将一个文件放入C:/Program Files/R/R-3.3.1/library 并使用source(paste0(.libPaths()[2],"/my_file.R")) 获取它
  • 如果已将 getwd 放入 Rprofile.site 并启动了新的 R 会话和新的 RStudio 会话。事实上getwd 总是返回命令提示符(R 会话)或 RStudio 项目根文件夹的当前路径。 libPaths() 可能是可能的解决方法,但我更愿意将源文件存储在同一文件夹中 Rprofile.site
  • source(paste0(.libPaths()[2],"/etc/my_file.R")) 然后呢?如果由于某种原因您的 Rprofile 不存在,您可以使用 libPath 中所需的任何相对路径并访问您的文件。

标签: r rprofile


【解决方案1】:

如果您不能使用绝对路径并且您的工作目录不稳定,一种方法是使用.libPaths.Library

默认情况下,您的Rprofile 应该在目录paste0(.Library,"/../etc/")paste0(.libPaths()[2],"/etc/") 中,这样您就可以将文件放在那里并使用:

source(paste0(.Library,"/../etc/my_settings.R")) 
source(paste0(.libPaths()[2],"/etc/my_settings.R")) 

据我了解,第一个选项是稳定的(我认为无法更改 .Library 的值)。

如果您使用第二个选项,请确保如果您将来更改您的.libPaths(),您会在获取文件后执行此操作。

有关默认文件夹的更多信息,请参阅?.libPaths

【讨论】:

  • 注意:这对于 Windows 来说是一个很好的解决方案,在 Linux 上,Rprofile.site 位于 /etc/R,因此无法搜索相对于库路径的文件(但如果绝对路径总是一样的!)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 2017-03-30
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多