7

基于对这个问题的回答:Elegant way to check for missing packages and install them?

我正在使用以下代码来确保在升级 R 或设置其他用户时安装了所有软件包:

list.of.packages <- c("RODBC", "reshape2", "plyr")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)

我已将它放在 .Rprofile 中的 .First 函数中,但是当我启动 R 时,它会出现以下错误并继续启动:

Error in match(x, table, nomatch = 0L) : 
  could not find function "installed.packages"

如果我在收到提示后运行代码,它可以正常工作。任何想法为什么?

谢谢!

4

1 回答 1

11

从阅读?Startup中可以看出:

接下来,如果在搜索路径中找到函数 .First,则将其作为 .First() 执行。最后,运行基础包中的函数 .First.sys()。此调用需要附加选项(“defaultPackages”)指定的默认包。

现在,installed.packagesutils包中,它通常是默认包之一。所以它在当时是不可用的.First

也许尝试替换installed.packagesutils::installed.packages?

正如 Josh 在下方指出的那样,我的视线掠过直接解决这个问题的文章,即:

请注意,当站点和用户配置文件获取源时,仅加载基本包,因此其他包中的对象需要通过例如 utils::dump.frames 或在显式加载相关包后引用。

于 2012-06-28T18:20:15.260 回答