?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(...
必要があるのは、 until が最初の引数を非標準的な方法で処理するcharacter.only=TRUE
ためです。detach
それが名前かどうかをチェックし、名前の場合はsubstitute
andを使用deparse
して文字に変換します。(このcharacter.only
引数は実際には間違った名前になっていますが、detach(2, character.only=TRUE)
まだ機能しています。実際には "accept.names" などと呼ぶ必要があります。)