R updat.Packages()不更新由其他包导入的包 [英] r update.packages() not updating packages that are imported by other packages

查看:15
本文介绍了R updat.Packages()不更新由其他包导入的包的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我最近从3.4.3更新到了3.5.1。我更新了我的包如下:

(A)将包从旧库复制到新库(注意不要覆盖基本包)

(B)运行update.packages(ask = FALSE, dependencies = TRUE)

我发现许多程序包没有安装在它们被列为其他程序包导入的位置,因为它们是使用具有不同内部结构的r版本创建的,需要重新安装。

有点令人沮丧的是,此消息似乎正在迭代关联或链接的包的某个隐藏列表,但一次只告诉我一个包有问题;即,我将安装版本错误的包,然后尝试重新安装它阻止安装的包,结果错误在另一个包中重复出现。我不得不多次检查,直到不再有与错误版本相关的程序包,最后才能安装/更新我需要使用的程序包。

还-我注意到一些包是从源代码安装的(这些包经常但不只是那些导致上面相关包的"不同内部"错误的包)。我确实安装了RTools,所以对我来说不是问题,只是作为更新的观察。每次遇到比Windows二进制文件(我有一台Windows 10 PC)更新的源代码版本时,Packages都会这样做。

我从所有这些中得出结论,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=空,则不使用。也可以是一个字符 向量,c("依赖","导入","链接到","建议", "增强")。

仅当lib的长度为1(或缺少)时才受支持,因此它是 明确地将依赖包安装在哪里。如果这不是 忽略大小写,并发出警告。

默认的na表示c("Dependents","Imports","LinkingTo")。千真万确 用于PKG的c("Dependents"、"Imports"、"LinkingTo"、"Suggest")的意思 和c("Dependents","Imports","LinkingTo")表示添加的依赖关系:这 安装运行pkg所需的所有包、它们的示例、测试 和插页(如果包作者正确指定了它们)。

在所有这些选项中,对于二进制包,"LinkingTo"被省略。

这意味着update.packages(...dependencies = TRUE)也应该已经更新和/或安装了由其他包导入的所有包。

我错过了什么?

推荐答案

我在更新到R 3.6.0后也遇到了同样的问题。在我的案例中,对Carlos Santillan的解决方案稍作修改就解决了问题:

for (i in 2:length(.libPaths())) {
  lib <- .libPaths()[i]
  install.packages( 
    lib  = .libPaths()[1] ,
    pkgs = as.data.frame(installed.packages(lib), stringsAsFactors=FALSE)$Package,
    type = 'source'
  )
}

在我的设置中,.libPath()返回以下内容:

> .libPaths()
[1] "/home/wassermann/R/x86_64-pc-linux-gnu-library/3.6" "/usr/local/lib/R/site-library"                
[3] "/usr/lib/R/site-library"                            "/usr/lib/R/library"    

.libPath()中的第一个目录在用户级别是可写的,其他三个目录是只读的。该代码遍历只读文件夹中的所有包,并将其较新版本安装在用户可写目录中。它不是最优的,因为它可能会多次迭代某些包,但您只需要运行一次,在所有包安装之后,不会出现令人恼火的"不同内部结构"错误。

这篇关于R updat.Packages()不更新由其他包导入的包的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆