【发布时间】:2019-01-31 05:58:57
【问题描述】:
我最近从 3.4.3 更新到 R 3.5.1。我更新了我的包如下:
(a) 将旧库中的包复制到新库中(注意不要覆盖基础包)
(b) 跑了update.packages(ask = FALSE, dependencies = TRUE)
我发现许多包没有安装在它们被列为其他包的导入的地方,因为它们“是用具有不同内部结构的 r 版本创建的,需要重新安装”。
有点令人沮丧的是,这条消息似乎在遍历一些隐藏的关联或链接包列表,但一次只告诉我一个包有问题;即我会安装版本错误的软件包,然后尝试重新安装它阻止安装的软件包,只是为了让不同的软件包重复错误。我不得不经历多次,直到没有更多与错误版本相关的包,最后我需要使用的包可以安装/更新。
另外 - 我注意到一些包是从源代码安装的(这些包经常但不完全是导致上述关联包的“不同内部”错误的包)。我确实安装了 Rtools,所以对我来说不是问题,但只是一个观察,因为 update.packages 每次遇到比 Windows 二进制文件更新的源版本时都会这样做(我有一台 Windows 10 PC)。
我从这一切中得出结论,update.packages 跳过了很多包,实际上由于某种原因没有更新它们?我仍在寻找未更新的软件包。
例如:
> DescTools::Gmean(x)
Error: package ‘expm’ was installed by an R version with different internals; it needs to be reinstalled for use with this R version
查看DescToolshere 的CRAN 条目表明包expm 不是依赖项,而是已导入。
但是?import.packages 谈到dependencies 参数:
依赖:
逻辑指示是否也安装卸载 这些包所依赖的包/链接到/导入/建议(等等 递归)。如果 repos = NULL,则不使用。也可以是人物 向量,c("Depends", "Imports", "LinkingTo", "Suggests", “增强”)。
仅当 lib 长度为 1(或缺失)时才支持,所以它是 明确安装依赖包的位置。如果这不是 忽略它的情况,并带有警告。
默认值 NA 表示 c("Depends", "Imports", "LinkingTo")。真的 表示对 pkgs 使用 c("Depends", "Imports", "LinkingTo", "Suggests") 和 c("Depends", "Imports", "LinkingTo") 添加依赖项:this 安装运行 pkgs 所需的所有软件包,它们的示例,测试 和小插图(如果包作者正确指定了它们)。
在所有这些中,二进制包都省略了“LinkingTo”。
这意味着update.packages(...dependencies = TRUE)应该也更新和/或安装了所有由其他包导入的包。
我错过了什么?
【问题讨论】:
-
你试过
update.packages(ask=FALSE, checkBuilt=TRUE)吗? -
啊 - 新的我可能忘记了一些东西 - 没有包括
checkBuilt = TRUE,这就是为什么有些包是从源代码构建的吗? -
不知道(二进制与源似乎是一个正交/不相关的问题?)