我想卸载一个包,而不必重新启动R(主要是因为重新启动R,因为我尝试了不同的,冲突的包令人沮丧,但可以想象这可以在程序中使用一个函数然后另一个 - - 尽管命名空间引用可能更适合这种用法。)
?library
没有显示任何可以卸载软件包的选项。
有一个suggestion detach
可以卸载包,但以下都失败了:
detach(vegan)
detach(vegan)
中的错误:无效name
参数
detach("vegan")
detach("vegan")
中的错误:无效name
参数
那么如何卸载包呢?
答案 0 :(得分:574)
试试这个(有关详细信息,请参阅?detach
):
detach("package:vegan", unload=TRUE)
可以同时加载多个版本的包(例如,如果您在不同的库中有开发版本和稳定版本)。要分离保证所有副本都已分离,请使用此功能。
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)
}
}
用法是,例如
detach_package(vegan)
或
detach_package("vegan", TRUE)
答案 1 :(得分:70)
您还可以使用unloadNamespace命令,如:
unloadNamespace("sqldf")
该函数在卸载命名空间之前将其分离。
答案 2 :(得分:24)
您可以取消选中RStudio(包)中的复选框按钮
答案 3 :(得分:8)
我尝试了kohske写的答案,我又得到了错误,所以我做了一些搜索,发现这对我有用(R 3.0.2):
require(splines) # package
detach(package:splines)
或
library(splines)
pkg <- "package:splines"
detach(pkg, character.only = TRUE)
答案 4 :(得分:7)
当你在脚本之间来回走动时,卸载包时可能只需要 。这是一个简单的IF语句,它可以防止在您尝试卸载当前未加载的软件包时出现的警告。
if("package:vegan" %in% search()) detach("package:vegan", unload=TRUE)
在脚本顶部包含此内容可能会有所帮助。
我希望这能让你的一天充满希望!
答案 5 :(得分:6)
detach(package:PackageName)
有效,无需使用引号。
答案 6 :(得分:4)
您可以使用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)
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
答案 7 :(得分:2)
请注意,您只能使用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 package(v0.3.0)于2020-05-09创建
答案 8 :(得分:1)
我想添加一个替代解决方案。此解决方案不能直接回答有关卸载软件包的问题,但是恕我直言,IMHO提供了一种更清洁的方法来实现您的期望目标,据我所知,它广泛地涉及避免名称冲突和尝试不同的功能,因为说:
主要是因为在尝试不同的冲突包时重新启动R令人感到沮丧,但是可以想象,可以在程序中使用它来使用一个函数,然后再使用另一个函数-尽管使用命名空间引用可能是一个更好的主意>
with_package
软件包提供的函数withr
提供了以下可能性:
将包附加到搜索路径,执行代码,然后从搜索路径中删除该包。但是,软件包名称空间是 not 卸载的。
(require '[clojure.spec.alpha :as s]
'[clojure.test :as t])
; ===
; Specs
; ===
(s/def ::be-row-col
(s/coll-of integer? :count 2 :kind sequential?))
(s/def ::be-square-matrix-size
(s/and integer? #(<= 0 %)))
(s/def ::be-row-col-vector
(s/and (s/coll-of ::be-row-col) (s/int-in-range? 0 5 #(count %))))
; ===
; Function of interest
; ===
(defn neighbors [sqmsz rc]
{:pre [(s/valid? ::be-row-col rc)
(s/valid? ::be-square-matrix-size sqmsz)]
:post [(s/valid? ::be-row-col-vector %)]
}
(let [ cross [[-1 0] [1 0] [0 -1] [0 1]]
in-sq-matrix? (fn [x]
(and (<= 0 x) (< x sqmsz)))
in-sq-matrix-rc? (fn [rc]
(every? in-sq-matrix? rc))
add-two-rc (fn [rc1 rc2]
(vec (map + rc1 rc2)))
get-rc-neighbors (fn [rc]
(map (partial add-two-rc rc) cross)) ]
(filter in-sq-matrix-rc? (get-rc-neighbors rc))))
; ===
; Put a collection of [row col] into an expected form
; ===
; this is used to run the test code
(defn formify [rc-coll]
(let [ cmp (fn [rc1 rc2]
(let [ [r1 c1] rc1
[r2 c2] rc2 ]
(cond (< r1 r2) -1 ; sort by row
(> r1 r2) +1
(< c1 c2) -1 ; then by column
(> c1 c2) +1
true 0))) ]
(vec (sort cmp rc-coll))))
; ===
; Testing
; ===
(defn test-nb [ sqmsz rc expected txt ]
(do
(t/is (= (formify (neighbors sqmsz rc)) expected) txt)
))
(test-nb 0 [0 0] [] "Zero-size matrix, outside #1")
(test-nb 0 [1 1] [] "Zero-size matrix, outside #2")
(test-nb 1 [0 0] [] "One-size matrix, inside")
(test-nb 1 [1 0] [[0 0]] "One-size matrix, outside")
(test-nb 5 [0 0] [[0 1] [1 0]] "Testing top left")
(test-nb 5 [1 0] [[0 0] [1 1] [2 0]] "Testing left edge")
(test-nb 5 [1 1] [[0 1] [1 0] [1 2] [2 1]] "Testing middle #1")
(test-nb 5 [2 2] [[1 2] [2 1] [2 3] [3 2]] "Testing middle #2")
(test-nb 5 [3 3] [[2 3] [3 2] [3 4] [4 3]] "Testing middle #3")
(test-nb 5 [4 4] [[3 4] [4 3]] "Testing btm right")
(test-nb 5 [5 5] [] "Testing outside #1")
(test-nb 5 [5 4] [[4 4]] "Testing outside #2")
(test-nb 5 [4 3] [[3 3] [4 2] [4 4]] "Testing btm edge")
无法从全局名称空间访问示例中使用的 library(withr)
with_package("ggplot2", {
ggplot(mtcars) + geom_point(aes(wt, hp))
})
# Calling geom_point outside withr context
exists("geom_point")
# [1] FALSE
。我认为这可能是一种比加载和卸载程序包更干净的冲突处理方式。
答案 9 :(得分:0)
只需转到OUTPUT窗口,然后点击Packages图标(它位于 Plot和Help 图标之间)。删除&#34; 勾选/复选标记&#34;从您想要卸载的包中。
再次使用该套餐只需输入&#34; 勾选或勾选标记&#34;在包装或使用前:
library (lme4)
答案 10 :(得分:0)
另一个选择是
devtools::unload("your-package")
这显然也可以处理unloadNamespace()
和issue of registered S3 methods that are not removed
答案 11 :(得分:0)
很惊讶没人提到这个
R.utils::detachPackage("package")