加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

卸载(删除)具有依赖关系的R包

发布时间:2020-12-14 00:48:56 所属栏目:百科 来源:网络整理
导读:我想尝试一些新的包.我安装它,它需要很多依赖,所以它安装了很多其他包.我尝试了,我没有留下深刻的印象 – 现在我想卸载那个包,包括所有的依赖! 有没有办法删除给定的包,包括系统中任何其他包都不需要的所有依赖项? 我看着?remove.packages,但没有选择这样
我想尝试一些新的包.我安装它,它需要很多依赖,所以它安装了很多其他包.我尝试了,我没有留下深刻的印象 – 现在我想卸载那个包,包括所有的依赖!

有没有办法删除给定的包,包括系统中任何其他包都不需要的所有依赖项?

我看着?remove.packages,但没有选择这样做.

以下是一些代码,将所有您删除一个包及其不必要的依赖关系.请注意,它对“不需要的”依赖软件包的解释是此软件包依赖的一组软件包,但不会在任何其他软件包中使用.这意味着它也将默认建议卸载没有反向依赖关系的软件包.因此,我已经将其实现为一个交互式菜单(如update.packages),以便您控制要卸载的内容.
library("tools")

removeDepends <- function(pkg,recursive = FALSE){
    d <- package_dependencies(,installed.packages(),recursive = recursive)
    depends <- if(!is.null(d[[pkg]])) d[[pkg]] else character()
    needed <- unique(unlist(d[!names(d) %in% c(pkg,depends)]))
    toRemove <- depends[!depends %in% needed]
    if(length(toRemove)){
         toRemove <- select.list(c(pkg,sort(toRemove)),multiple = TRUE,title = "Select packages to remove")
         remove.packages(toRemove)
         return(toRemove)
    } else {
        invisible(character())
    }
}

# Example
install.packages("YplantQMC") # installs an unneeded dependency "LeafAngle"
c("YplantQMC","LeafAngle") %in% installed.packages()[,1]
## [1] TRUE TRUE
removeDepends("YplantQMC")
c("YplantQMC","LeafAngle")  %in% installed.packages()[,1]
## [1] FALSE FALSE

注意:递归选项可能特别有用.如果软件包依赖性进一步依赖于其他不需要的软件包,则设置recursive = TRUE至关重要.如果依赖关系很浅(即依赖关系树下只有一个级别),则可以保留为FALSE(默认值).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读