我想尝试一些新的包.我安装它,它需要很多依赖,所以它安装了很多其他包.我尝试了,我没有留下深刻的印象 – 现在我想卸载那个包,包括所有的依赖!
有没有办法删除给定的包,包括系统中任何其他包都不需要的所有依赖项?
我看着?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(默认值).