我希望卸载一个包而不必重新启动R(主要是因为在尝试不同的、冲突的包时重新启动R会令人沮丧,但可以想象,这可以在程序中使用一个函数,然后使用另一个函数——尽管名称空间引用可能是更好的使用方法)。
?库没有显示任何卸载包的选项。
有一个建议detach可以卸载包,但以下两个都失败:
detach(vegan)
分离错误(纯素):无效的名称参数
detach("vegan")
分离错误("vegan"):无效的名称参数
那我怎么卸货呢?
我希望卸载一个包而不必重新启动R(主要是因为在尝试不同的、冲突的包时重新启动R会令人沮丧,但可以想象,这可以在程序中使用一个函数,然后使用另一个函数——尽管名称空间引用可能是更好的使用方法)。
?库没有显示任何卸载包的选项。
有一个建议detach可以卸载包,但以下两个都失败:
detach(vegan)
分离错误(纯素):无效的名称参数
detach("vegan")
分离错误("vegan"):无效的名称参数
那我怎么卸货呢?
当前回答
还要注意,您只能使用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)
其他回答
当您在脚本之间来回切换时,有时可能只需要卸载一个包。下面是一个简单的IF语句,它可以防止在试图卸载当前未加载的包时出现警告。
if("package:vegan" %in% search()) detach("package:vegan", unload=TRUE)
在脚本顶部包含这一点可能会有所帮助。
我希望这能让你开心!
detach(package:PackageName)有效,不需要使用引号。
只需转到OUTPUT窗口,然后单击Packages图标(它位于Plot和Help图标之间)。从你想要卸载的包裹上去掉“勾号/对号”。
对于再次使用包装,只需在包装或使用前打勾或检查标记:
library (lme4)
我想补充一个替代方案。这个解决方案并没有直接回答你卸载包的问题,但是,恕我直言,提供了一个更干净的替代方案来实现你想要的目标,这是我所理解的,广泛关注于避免名称冲突和尝试不同的功能,如前所述:
主要是因为当我尝试不同的、冲突的包时重新启动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不能从全局名称空间访问。我认为这可能是一种比装卸包裹更干净的处理冲突的方式。
另一个选择是
devtools::unload("your-package")
这显然也处理了未使用unloadNamespace()删除的已注册S3方法的问题。