如何在不重启R的情况下卸载软件包?

Ari*_*man 496 r package r-faq

我想卸载一个包而不必重新启动R(主要是因为重新启动R,因为我尝试了不同的,冲突的包令人沮丧,但可以想象这可以在一个程序中使用一个函数然后另一个 - 虽然命名空间引用可能是一个更好的主意用于此用途).

?library 没有显示任何可以卸载包的选项.

有一种建议detach可以卸载包,但以下两个失败:

detach(vegan)
Run Code Online (Sandbox Code Playgroud)

错误detach(vegan):无效name参数

detach("vegan")
Run Code Online (Sandbox Code Playgroud)

错误detach("vegan"):无效name参数

那么如何卸载包呢?

koh*_*ske 609

试试这个(?detach详情请见):

detach("package:vegan", unload=TRUE)
Run Code Online (Sandbox Code Playgroud)

可以同时加载多个版本的包(例如,如果您在不同的库中具有开发版本和稳定版本).要分离保证所有副本都已分离,请使用此功能.

detach_package <- function(pkg, character.only = FALSE)
{
  if(!character.only)
  {
    pkg <- deparse(substitute(pkg))
  }
  search_item <- paste("package", pkg, sep = ":")
  while(search_item %in% search())
  {
    detach(search_item, unload = TRUE, character.only = TRUE)
  }
}
Run Code Online (Sandbox Code Playgroud)

例如,用法

detach_package(vegan)
Run Code Online (Sandbox Code Playgroud)

要么

detach_package("vegan", TRUE)
Run Code Online (Sandbox Code Playgroud)

  • 如果您收到无效的'name'参数错误,请添加character.only = TRUE. (5认同)
  • @hadley确实.未加引号的版本似乎不适用于最新版本的R.我更新了kohske的答案以反映您的解决方案. (3认同)
  • `&gt; detach("package:MASS", unload=TRUE) detach("package:MASS", unload = TRUE) 错误:'name' 参数无效` (3认同)
  • > detach("package:kriging",unload = TRUE,character.only = T)分离时出错("package:kriging",unload = TRUE,character.only = T):无效的"name"参数.但@rstober解决方案确实有效! (2认同)

rst*_*ber 76

您还可以使用unloadNamespace命令,如下所示:

unloadNamespace("sqldf")
Run Code Online (Sandbox Code Playgroud)

该函数在卸载之前分离命名空间.

  • 如果@kohske的解决方案也不适合你,这对我有用 (2认同)

Aja*_*hri 25

你可以取消选中RStudio中的复选框按钮(包)

  • 值得补充的是,这会导致`detach("package:packageToUnload",unload = TRUE)`命令被执行,与[已经提出的解决方案]没有什么不同.(http://stackoverflow.com/a/6979989/ 1655567) (13认同)
  • 另外,如果使用 rstudio 安装并重新启动加载包,则不会选中该框(错误?)。但您可以仅选中和取消选中它。 (2认同)

Meh*_*ian 9

我尝试了kohske写的答案,我又得到了错误,所以我做了一些搜索,发现这对我有用(R 3.0.2):

require(splines) # package
detach(package:splines)
Run Code Online (Sandbox Code Playgroud)

或者也

library(splines)
pkg <- "package:splines"
detach(pkg, character.only = TRUE)
Run Code Online (Sandbox Code Playgroud)

  • 你得到什么错误?因为它适合我(R 3.1).第二个解决方案是@ koshke的答案,只是没有卸载(所以没有卸载包名称空间). (3认同)

dca*_*dca 8

当您在脚本之间来回切换时,有时可能需要卸载程序包.这是一个简单的IF语句,它可以防止在您尝试卸载当前未加载的软件包时出现的警告.

if("package:vegan" %in% search()) detach("package:vegan", unload=TRUE) 
Run Code Online (Sandbox Code Playgroud)

将其包含在脚本的顶部可能会有所帮助.

我希望你的一天!


小智 8

detach(package:PackageName) 可以,并且不需要使用引号。


Tje*_*ebo 7

另一种选择是

devtools::unload("your-package")
Run Code Online (Sandbox Code Playgroud)

这显然也解决了注册的 S3 方法未被删除的问题unloadNamespace()


Mat*_*ach 5

您可以尝试删除一个包(以及它带来的所有依赖项)使用,unloadNamespace()内存占用仍然存在。不,detach("package:,packageName", unload=TRUE, force = TRUE)也不行。

从全新的控制台或Session > Restart 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)
Run Code Online (Sandbox Code Playgroud)

检查我的 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   
Run Code Online (Sandbox Code Playgroud)

让我们加载Seurat包并检查新的内存占用

library(Seurat)
pryr::mem_used()

# 172 MB    ## Likely to change in the future but just to give you an idea
Run Code Online (Sandbox Code Playgroud)

让我们使用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")
Run Code Online (Sandbox Code Playgroud)

现在检查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 
Run Code Online (Sandbox Code Playgroud)

检查内存占用

pryr::mem_used()

# 173 MB
Run Code Online (Sandbox Code Playgroud)

链接到屏幕播放演示


Mat*_*fou 5

另请注意,您只能使用unload()一次。如果您第二次使用它而不重新运行library(),您将收到信息不多的错误消息invalid 'name' argument

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
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v0.3.0)于 2020-05-09 创建