12

この回答に触発されて、一度に複数のパッケージを切り離す方法を探しています。

Hmiscと言うとロードすると、

# install.packages("Hmisc", dependencies = TRUE)
require(Hmisc)

Rと もロードsurvivalsplinesます。私の質問は、そのグループを一緒にアンロードする方法があるかどうかです?

私は現在、このようなことをしています、

detach(package:Hmisc, unload = T) 
detach(package:survival, unload = T) 
detach(package:splines, unload = T)

私は試した、

detach(package:c('Hmisc', 'survival', 'splines'), unload = T)

…</p>

4

4 に答える 4

11

別のオプション:

Vectorize(detach)(name=paste0("package:", c("Hmisc","survival","splines")), unload=TRUE, character.only=TRUE)
于 2013-07-09T13:10:01.277 に答える
5

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

于 2013-07-09T13:00:06.240 に答える