检查R中已安装的软件包。

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"

如果我在提示后运行代码,它就可以正常工作。有什么想法吗?

谢谢!

1个回答

12

从阅读 ?Startup 的内容看,似乎有以下情况:

接下来,在搜索路径中查找函数 .First,如果找到,则执行 .First()。最后,运行基础包中的函数 .First.sys(),该函数调用 require 来附加由 options("defaultPackages") 指定的默认包。

现在,installed.packagesutils 包中,这通常是默认包之一。因此,在调用 .First 时不可用。

也许可以尝试将 installed.packages 替换为 utils::installed.packages

正如 Josh 在下面指出的那样,我的眼睛略过了直接解决此问题的部分,即:

请注意,在加载网站和用户配置文件时,仅加载基础包,因此需要通过例如 utils::dump.frames 引用其他包中的对象或在明确加载相关包之后才能引用。


1
或者(如在?Startup中稍早描述的那样),您可以使用utils::installed.packages,或者首先使用require(utils)显式加载该包。 - Josh O'Brien
太棒了。使用utils::installed.packages和utils::install.packages函数就可以解决问题。感谢Josh和Joran! - sinclairjesse

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