?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(...
因为除非以非标准方式处理其第一个参数。它检查它是否是一个名字,如果是,使用and把它变成字符。(这个论点确实命名错误,仍然有效。它真的应该被称为“accept.names”或其他东西。)character.only=TRUE
detach
substitute
deparse
character.only
detach(2, character.only=TRUE)