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

前端之家收集整理的这篇文章主要介绍了卸载(删除)具有依赖关系的R包前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想尝试一些新的包.我安装它,它需要很多依赖,所以它安装了很多其他包.我尝试了,我没有留下深刻的印象 – 现在我想卸载那个包,包括所有的依赖!

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

我看着?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(默认值).

猜你在找的设计模式相关文章