受到这个答案的启发,我正在寻找一种方法来同时分离几个包.
当我加载说Hmisc,
# install.packages("Hmisc", dependencies = TRUE)
require(Hmisc)
Run Code Online (Sandbox Code Playgroud)
R也加载survival和splines.我的问题是,是否有办法将该组一起卸载?
我现在做这样的事,
detach(package:Hmisc, unload = T)
detach(package:survival, unload = T)
detach(package:splines, unload = T)
Run Code Online (Sandbox Code Playgroud)
我试过了,
detach(package:c('Hmisc', 'survival', 'splines'), unload = T)
Run Code Online (Sandbox Code Playgroud)
...
Fer*_*aft 11
另外一个选项:
Vectorize(detach)(name=paste0("package:", c("Hmisc","survival","splines")), unload=TRUE, character.only=TRUE)
Run Code Online (Sandbox Code Playgroud)
?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)
Run Code Online (Sandbox Code Playgroud)
与餐间eval(substitute(...是必要的,因为,除非character.only=TRUE,detach处理在一个非标准的方式第一个参数.它会检查它是否是名称,如果是,则使用substitute并将deparse其转换为字符.(这个character.only论点的名字确实是错误的,因为detach(2, character.only=TRUE)它仍然有效.它应该被称为"accept.names"或其他东西.)