受this answer的启发,我正在寻找一种同时分离多个包的方法。
当我加载Hmisc时,
# install.packages("Hmisc", dependencies = TRUE)
require(Hmisc)R还加载survival和splines。我的问题是,是否有一种方法可以一起卸载这个组?
我目前正在做这样的事情,
detach(package:Hmisc, unload = T)
detach(package:survival, unload = T)
detach(package:splines, unload = T)我试过了
detach(package:c('Hmisc', 'survival', 'splines'), unload = T)…
发布于 2013-07-09 21:10:01
另一种选择:
Vectorize(detach)(name=paste0("package:", c("Hmisc","survival","splines")), unload=TRUE, character.only=TRUE)发布于 2013-07-09 21:00:06
?detach明确排除了提供字符向量(而不是标量,即要分离的多个库)作为其第一个参数的可能性,但您始终可以创建一个辅助函数。这将接受多个输入,这些输入可以是字符串、名称或数字。数字与初始搜索列表中的条目相匹配,因此搜索列表在每次分离后动态更新的事实不会导致它中断。
mdetach <- function(..., unload = FALSE, character.only = FALSE, force = FALSE)
{
path <- search()
locs <- lapply(match.call(expand=FALSE)$..., function(l) {
if(is.numeric(l))
path[l]
else l
})
lapply(locs, function(l)
eval(substitute(detach(.l, unload=.u, character.only=.c, force=.f),
list(.l=l, .u=unload, .c=character.only, .f=force))))
invisible(NULL)
}
library(xts) # also loads zoo
# any combination of these work
mdetach(package:xts, package:zoo, unload=TRUE)
mdetach("package:xts", "package:zoo", unload=TRUE)
mdetach(2, 3, unload=TRUE)与eval(substitute(...打交道是必要的,因为除非是character.only=TRUE,否则detach会以非标准的方式处理它的第一个参数。它检查它是否是一个名称,如果是,则使用substitute和deparse将其转换为字符。(由于detach(2, character.only=TRUE)仍然有效,所以character.only参数的名称确实是错误的。它真的应该被称为"accept.names“之类的。)
发布于 2013-07-10 01:21:55
在回答我自己的问题时,我想回答以下问题:
detlist<-c('Hmisc','survival','splines')
lapply(detlist, function(k) detach( paste('package:', k, sep='', collapse=''), unload=TRUE, char=TRUE))工作得很好。base::detach顶部的排序功能有点不稳定,但使用character.only=TRUE可以让我很好地完成。
https://stackoverflow.com/questions/17548385
复制相似问题