我希望卸载一个包而不必重新启动R(主要是因为在尝试不同的、冲突的包时重新启动R会令人沮丧,但可以想象,这可以在程序中使用一个函数,然后使用另一个函数——尽管名称空间引用可能是更好的使用方法)。
?库没有显示任何卸载包的选项。
有一个建议detach可以卸载包,但以下两个都失败:
detach(vegan)
分离错误(纯素):无效的名称参数
detach("vegan")
分离错误("vegan"):无效的名称参数
那我怎么卸货呢?
我希望卸载一个包而不必重新启动R(主要是因为在尝试不同的、冲突的包时重新启动R会令人沮丧,但可以想象,这可以在程序中使用一个函数,然后使用另一个函数——尽管名称空间引用可能是更好的使用方法)。
?库没有显示任何卸载包的选项。
有一个建议detach可以卸载包,但以下两个都失败:
detach(vegan)
分离错误(纯素):无效的名称参数
detach("vegan")
分离错误("vegan"):无效的名称参数
那我怎么卸货呢?
当前回答
我尝试了kohske写的答案,我又得到了错误,所以我做了一些搜索,发现这对我有用(R 3.0.2):
require(splines) # package
detach(package:splines)
或者还
library(splines)
pkg <- "package:splines"
detach(pkg, character.only = TRUE)
其他回答
detach(package:PackageName)有效,不需要使用引号。
您可以使用unloadNamespace()尝试所有您想要删除的包(以及它所带来的所有依赖项),但内存占用仍然会持续存在。不,detach("package:,packageName", unload=TRUE, force =TRUE)也不会工作。
从一个新的控制台或会话>重新启动R检查内存与pryr包:
pryr::mem_used()
# 40.6 MB ## This will depend on which packages are loaded obviously (can also fluctuate a bit after the decimal)
检查我的sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17763)
Matrix products: default
locale:
[1] LC_COLLATE=English_Canada.1252 LC_CTYPE=English_Canada.1252 LC_MONETARY=English_Canada.1252 LC_NUMERIC=C
[5] LC_TIME=English_Canada.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_3.6.1 pryr_0.1.4 magrittr_1.5 tools_3.6.1 Rcpp_1.0.3 stringi_1.4.3 codetools_0.2-16 stringr_1.4.0
[9] packrat_0.5.0
让我们加载Seurat包并检查新的内存占用:
library(Seurat)
pryr::mem_used()
# 172 MB ## Likely to change in the future but just to give you an idea
让我们使用unloadNamespace()来删除所有内容:
unloadNamespace("Seurat")
unloadNamespace("ape")
unloadNamespace("cluster")
unloadNamespace("cowplot")
unloadNamespace("ROCR")
unloadNamespace("gplots")
unloadNamespace("caTools")
unloadNamespace("bitops")
unloadNamespace("fitdistrplus")
unloadNamespace("RColorBrewer")
unloadNamespace("sctransform")
unloadNamespace("future.apply")
unloadNamespace("future")
unloadNamespace("plotly")
unloadNamespace("ggrepel")
unloadNamespace("ggridges")
unloadNamespace("ggplot2")
unloadNamespace("gridExtra")
unloadNamespace("gtable")
unloadNamespace("uwot")
unloadNamespace("irlba")
unloadNamespace("leiden")
unloadNamespace("reticulate")
unloadNamespace("rsvd")
unloadNamespace("survival")
unloadNamespace("Matrix")
unloadNamespace("nlme")
unloadNamespace("lmtest")
unloadNamespace("zoo")
unloadNamespace("metap")
unloadNamespace("lattice")
unloadNamespace("grid")
unloadNamespace("httr")
unloadNamespace("ica")
unloadNamespace("igraph")
unloadNamespace("irlba")
unloadNamespace("KernSmooth")
unloadNamespace("leiden")
unloadNamespace("MASS")
unloadNamespace("pbapply")
unloadNamespace("plotly")
unloadNamespace("png")
unloadNamespace("RANN")
unloadNamespace("RcppAnnoy")
unloadNamespace("tidyr")
unloadNamespace("dplyr")
unloadNamespace("tibble")
unloadNamespace("RANN")
unloadNamespace("tidyselect")
unloadNamespace("purrr")
unloadNamespace("htmlwidgets")
unloadNamespace("htmltools")
unloadNamespace("lifecycle")
unloadNamespace("pillar")
unloadNamespace("vctrs")
unloadNamespace("rlang")
unloadNamespace("Rtsne")
unloadNamespace("SDMTools")
unloadNamespace("Rdpack")
unloadNamespace("bibtex")
unloadNamespace("tsne")
unloadNamespace("backports")
unloadNamespace("R6")
unloadNamespace("lazyeval")
unloadNamespace("scales")
unloadNamespace("munsell")
unloadNamespace("colorspace")
unloadNamespace("npsurv")
unloadNamespace("compiler")
unloadNamespace("digest")
unloadNamespace("R.utils")
unloadNamespace("pkgconfig")
unloadNamespace("gbRd")
unloadNamespace("parallel")
unloadNamespace("gdata")
unloadNamespace("listenv")
unloadNamespace("crayon")
unloadNamespace("splines")
unloadNamespace("zeallot")
unloadNamespace("reshape")
unloadNamespace("glue")
unloadNamespace("lsei")
unloadNamespace("RcppParallel")
unloadNamespace("data.table")
unloadNamespace("viridisLite")
unloadNamespace("globals")
现在检查sessionInfo():
R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17763)
Matrix products: default
locale:
[1] LC_COLLATE=English_Canada.1252 LC_CTYPE=English_Canada.1252 LC_MONETARY=English_Canada.1252 LC_NUMERIC=C
[5] LC_TIME=English_Canada.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] tools_3.6.1 stringr_1.4.0 rstudioapi_0.10 pryr_0.1.4 jsonlite_1.6 gtools_3.8.1 R.oo_1.22.0
[8] magrittr_1.5 Rcpp_1.0.3 R.methodsS3_1.7.1 stringi_1.4.3 plyr_1.8.4 reshape2_1.4.3 codetools_0.2-16
[15] packrat_0.5.0 assertthat_0.2.1
检查内存占用:
pryr::mem_used()
# 173 MB
链接到屏幕演示
你也可以使用unloadNamespace命令,如下所示:
unloadNamespace("sqldf")
该函数在卸载名称空间之前将其分离。
还要注意,您只能使用unload()一次。如果你在没有重新运行library()的情况下再次使用它,你会得到一个信息量不大的错误消息无效的'name'参数:
library(vegan)
#> Loading required package: permute
#> Loading required package: lattice
#> This is vegan 2.5-6
detach("package:vegan", unload=TRUE)
detach("package:vegan", unload=TRUE)
#> Error in detach("package:vegan", unload = TRUE): invalid 'name' argument
由reprex包于2020-05-09创建(v0.3.0)
我想补充一个替代方案。这个解决方案并没有直接回答你卸载包的问题,但是,恕我直言,提供了一个更干净的替代方案来实现你想要的目标,这是我所理解的,广泛关注于避免名称冲突和尝试不同的功能,如前所述:
主要是因为当我尝试不同的、冲突的包时重新启动R是令人沮丧的,但可以想象,这可以在程序中使用一个函数,然后使用另一个函数——尽管命名空间引用可能是更好的使用方法
解决方案
withr包提供的with_package函数提供了以下功能:
将包附加到搜索路径,执行代码,然后从搜索路径中删除包。但是,包名称空间不会被卸载。
例子
library(withr)
with_package("ggplot2", {
ggplot(mtcars) + geom_point(aes(wt, hp))
})
# Calling geom_point outside withr context
exists("geom_point")
# [1] FALSE
示例中使用的Geom_point不能从全局名称空间访问。我认为这可能是一种比装卸包裹更干净的处理冲突的方式。