在运行.Rprofile之前,请确保所有默认包都已加载。

7
我有几个RStudio项目,用于自动化任务,例如批改多项选择测试。完成任务所需的函数只是保存在文本文件中,在确保这些函数对我或其他用户可用的同时,我一直在使用.Rprofile文件,在启动时运行类似于source("MyFunctions.R")的命令。如果在RStudio项目的基本目录中存在.Rprofile文件,则打开项目时会自动运行该文件。
然而,我偶尔会遇到一些错误,出现在脚本被源码之前并未加载提供的基础R包中的函数,例如read.csvinstalled.packages函数等。
Error in eval(expr, envir, enclos) : 
  could not find function "installed.packages"

有没有一种方法可以在运行source()之前等待默认包加载完成,而不是为所有无法加载的默认包添加显式的library()调用?

2个回答

7

这篇来自?Startup的文章似乎相当权威:

请注意,当网站和用户个人资料文件只被引用时,只会加载“基础”包,因此其他包中的对象需要使用“utils::dump.frames”等方式引用,或在明确加载相关包之后进行引用

基于这个明确的建议,使用library()加载必要的包似乎是您最好的选择。


谢谢,看来我应该重新考虑使用.Rprofile来处理这些事情。我一直把它当作自动加载函数和运行脚本的快速便捷方式,但似乎它并不像那样工作。 - Marius
如果你还没有看过,你可能会对这个SO [r]-tag经典问题感兴趣:https://dev59.com/kHM_5IYBdhLWcg3w3nXz - Josh O'Brien

2

在Josh的回答中,他指向了?Startup文档,看起来在.Rprofile顶部添加.First.sys()调用可能是一个选项,因为这似乎是处理加载所有默认包的函数。它通常在.Rprofile之后运行,这可以解释我得到的错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接