我最近从3.4.3更新到了R 3.5.1。我按以下方式更新我的软件包:
(a) 将旧库中的软件包复制到新库中(小心不要覆盖基础软件包)
(b) 运行 update.packages(ask = FALSE, dependencies = TRUE)
我发现一些软件包在其他软件包中被列为导入项时没有安装成功,因为它们“是使用具有不同内部版本的r创建的,需要重新安装”。
比较令人沮丧的是,这个消息似乎正在遍历某个隐藏的相关或链接的软件包列表,但只告诉我每次只有一个软件包存在问题;也就是说,我将安装错误版本的软件包,然后尝试重新安装它阻止的软件包,只会为另一个软件包重复出现错误。我必须多次重复这个过程,直到没有更多的不正确版本的相关软件包,最终我需要使用的软件包才能被安装/更新。
此外-我注意到某些软件包是从源代码安装的(这些软件包经常但不完全是导致上述关联软件包“不同内部”的错误)。我安装了Rtools,所以对我来说不是问题,但这只是一个观察结果,因为每次update.packages
遇到比Windows二进制文件更高版本的源代码时都会这样做(我有一台Windows 10个人电脑)。
我从所有这些中得出结论:由于某种原因,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
查看
DescTools
的CRAN条目这里表明,包expm
不是一个依赖项,但会被导入。然而,
?import.packages
对dependencies
参数进行了解释:逻辑值,指示是否安装未安装的与这些软件包有关/链接/导入/建议(等等)的软件包(并以此类推)。如果repos = NULL,则不使用。也可以是字符向量,c("Depends", "Imports", "LinkingTo", "Suggests", "Enhances")的子集。
仅在lib长度为一(或缺失)的情况下受支持,因此可以明确安装相关软件包的位置。如果不是这种情况,则忽略它,并发出警告。
默认值NA表示c("Depends", "Imports", "LinkingTo")。TRUE的意思是对于pkgs使用c("Depends", "Imports", "LinkingTo", "Suggests"),对于添加的依赖项使用c("Depends", "Imports", "LinkingTo"):这将安装运行pkgs所需的所有软件包、它们的示例、测试和vignettes(如果软件包作者正确指定了它们)。
在所有这些中,“LinkingTo”被省略了二进制软件包。
这意味着
update.packages(...dependencies = TRUE)
应该同时更新和/或安装其他软件包导入的所有软件包。我错过了什么?
update.packages(ask=FALSE, checkBuilt=TRUE)
吗? - Ben BolkercheckBuilt = TRUE
,这可能是为什么一些软件包正在从源代码构建的原因吗? - Amy M