我希望卸载一个包而不必重新启动R(主要是因为在尝试不同的、冲突的包时重新启动R会令人沮丧,但可以想象,这可以在程序中使用一个函数,然后使用另一个函数——尽管名称空间引用可能是更好的使用方法)。
?库没有显示任何卸载包的选项。
有一个建议detach可以卸载包,但以下两个都失败:
detach(vegan)
分离错误(纯素):无效的名称参数
detach("vegan")
分离错误("vegan"):无效的名称参数
那我怎么卸货呢?
我希望卸载一个包而不必重新启动R(主要是因为在尝试不同的、冲突的包时重新启动R会令人沮丧,但可以想象,这可以在程序中使用一个函数,然后使用另一个函数——尽管名称空间引用可能是更好的使用方法)。
?库没有显示任何卸载包的选项。
有一个建议detach可以卸载包,但以下两个都失败:
detach(vegan)
分离错误(纯素):无效的名称参数
detach("vegan")
分离错误("vegan"):无效的名称参数
那我怎么卸货呢?
当前回答
只需转到OUTPUT窗口,然后单击Packages图标(它位于Plot和Help图标之间)。从你想要卸载的包裹上去掉“勾号/对号”。
对于再次使用包装,只需在包装或使用前打勾或检查标记:
library (lme4)
其他回答
detach(package:PackageName)有效,不需要使用引号。
试试这个(详见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)
or
detach_package("vegan", TRUE)
当您在脚本之间来回切换时,有时可能只需要卸载一个包。下面是一个简单的IF语句,它可以防止在试图卸载当前未加载的包时出现警告。
if("package:vegan" %in% search()) detach("package:vegan", unload=TRUE)
在脚本顶部包含这一点可能会有所帮助。
我希望这能让你开心!
我尝试了kohske写的答案,我又得到了错误,所以我做了一些搜索,发现这对我有用(R 3.0.2):
require(splines) # package
detach(package:splines)
或者还
library(splines)
pkg <- "package:splines"
detach(pkg, character.only = TRUE)
连接到@tjebo答案。
博士TL; 请使用pkgload:::unload而不是devtools::unload,因为它们是相同的函数(1对1),pkgload是一个更轻的包(没有依赖关系)。Devtools只是重新导出pkgload:::unload函数。
不幸的是,devtools是一个巨大的依赖项(因为devtools有很多自己的依赖项),它更多地是针对开发阶段的。所以如果你想在你自己的包中使用unload函数,或者你关心库的大小,请记住使用pkgload:::unload而不是devtools::unload。Devtools只是重新导出pkgload:::unload函数。
请检查devtools::unload函数的页脚以快速确认重新导出或去github repo
> devtools::unload
function (package = pkg_name(), quiet = FALSE)
{
if (package == "compiler") {
oldEnable <- compiler::enableJIT(0)
if (oldEnable != 0) {
warning("JIT automatically disabled when unloading the compiler.")
}
}
if (!package %in% loadedNamespaces()) {
stop("Package ", package, " not found in loaded packages or namespaces")
}
unregister_methods(package)
unloaded <- tryCatch({
unloadNamespace(package)
TRUE
}, error = function(e) FALSE)
if (!unloaded) {
unload_pkg_env(package)
unregister_namespace(package)
}
clear_cache()
unload_dll(package)
}
<bytecode: 0x11a763280>
<environment: namespace:pkgload>