別の問題を解決するために取り組んでいる間、私はこの問題を得ました:
次の方法ですべてのRオブジェクトを削除できます。
rm(list = ls(all = TRUE))
作業セッション中にインストール済みパッケージをデタッチできる同等のコマンドはありますか?
> sessionInfo()
R version 2.12.2 (2011-02-25)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
require(ggplot2)
Loading required package: ggplot2
Loading required package: reshape
Loading required package: plyr
Attaching package: 'reshape'
The following object(s) are masked from 'package:plyr':
round_any
Loading required package: grid
Loading required package: proto
sessionInfo()
R version 2.12.2 (2011-02-25)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] grid stats graphics grDevices utils datasets methods
[8] base
other attached packages:
[1] ggplot2_0.8.9 proto_0.3-9.1 reshape_0.8.4 plyr_1.4
私はこの方法を試しましたが、グローバルなソリューションではありませんでした:
pkg <- c("package:ggplot2_0.8.9", "package:proto_0.3-9.1", "package:reshape_0.8.4", "package:plyr_1.4")
detach(pkg, character.only = TRUE)
Error in detach(pkg, character.only = TRUE) : invalid 'name' argument
In addition: Warning message:
In if (is.na(pos)) stop("invalid 'name' argument") :
the condition has length > 1 and only the first element will be used
私が求めているのはグローバルなものです:
rm(list = ls(all = TRUE))
オブジェクトの場合、添付された基本パッケージが削除されないことを期待
ありがとう。
だから、誰かが単に次のように答えるべきでした。
lapply(paste('package:',names(sessionInfo()$otherPkgs),sep=""),detach,character.only=TRUE,unload=TRUE)
(編集:6-28-19)R 3.6.0の最新バージョンでは、代わりに使用してください。
invisible(lapply(paste0('package:', names(sessionInfo()$otherPkgs)), detach, character.only=TRUE, unload=TRUE))
Invisible(*)の使用は必須ではありませんが、NULL応答がRウィンドウを垂直方向にスパムするのを防ぐのに役立つことに注意してください。
これを試してください:
detachAllPackages <- function() {
basic.packages <- c("package:stats","package:graphics","package:grDevices","package:utils","package:datasets","package:methods","package:base")
package.list <- search()[ifelse(unlist(gregexpr("package:",search()))==1,TRUE,FALSE)]
package.list <- setdiff(package.list,basic.packages)
if (length(package.list)>0) for (package in package.list) detach(package, character.only=TRUE)
}
detachAllPackages()
あなたは近くにいました。 detach()
の最初の引数name
について_?detach
_が言っていることに注意してください:
引数:
_name: The object to detach. Defaults to ‘search()[pos]’. This can be an unquoted name or a character string but _not_ a character vector. If a number is supplied this is taken as ‘pos’.
_
したがって、pkg
の要素ごとにdetach()
を繰り返し呼び出す必要があります。これを機能させるために指定する必要がある他の引数がいくつかあります。 1つ目は_character.only = TRUE
_です。これにより、関数はname
が文字列であると想定できます。これがないと機能しません。第二に、関連する名前空間をアンロードすることもおそらく必要です。これは、_unload = TRUE
_を設定することで実現できます。したがって、解決策は次のとおりです。
_pkg <- c("package:vegan","package:permute")
lapply(pkg, detach, character.only = TRUE, unload = TRUE)
_
完全な例を次に示します。
_> require(vegan)
Loading required package: vegan
Loading required package: permute
This is vegan 2.0-0
> sessionInfo()
R version 2.13.1 Patched (2011-09-13 r57007)
Platform: x86_64-unknown-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_GB.utf8 LC_NUMERIC=C
[3] LC_TIME=en_GB.utf8 LC_COLLATE=en_GB.utf8
[5] LC_MONETARY=C LC_MESSAGES=en_GB.utf8
[7] LC_PAPER=en_GB.utf8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.utf8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods
[7] base
other attached packages:
[1] vegan_2.0-0 permute_0.7-0
loaded via a namespace (and not attached):
[1] grid_2.13.1 lattice_0.19-33 tools_2.13.1
> pkg <- c("package:vegan","package:permute")
> lapply(pkg, detach, character.only = TRUE, unload = TRUE)
[[1]]
NULL
[[2]]
NULL
> sessionInfo()
R version 2.13.1 Patched (2011-09-13 r57007)
Platform: x86_64-unknown-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_GB.utf8 LC_NUMERIC=C
[3] LC_TIME=en_GB.utf8 LC_COLLATE=en_GB.utf8
[5] LC_MONETARY=C LC_MESSAGES=en_GB.utf8
[7] LC_PAPER=en_GB.utf8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.utf8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods
[7] base
loaded via a namespace (and not attached):
[1] grid_2.13.1 lattice_0.19-33 tools_2.13.1
_
これを関数に変換する場合は、sessionInfo()
のコードを調べて、「その他の添付パッケージ:」としてラベル付けされているものをどのように識別するかを確認してください。そのコードの一部を上記のアイデアと1つの機能で組み合わせれば、あなたは家に居ながらドライになります。ただし、それはあなたにお任せします。
nothing
RomainFrançois で利用できるソリューションを追加する価値があるかもしれません。パッケージをロードすると、 nothing
、これは現在 GitHub で利用可能です。ロードされたすべてのパッケージをアンロードします。 Romainが提供する例のように:
loadedNamespaces()
[1] "base" "datasets" "grDevices" "graphics" "methods" "stats"
[7] "utils"
require(nothing, quietly = TRUE)
loadedNamespaces()
[1] "base"
devtools
パッケージの使用:
devtools::install_github("romainfrancois/nothing")
pacman
別のアプローチでは、 pacman
CRANから入手可能なパッケージを使用します。
pacman::p_unload(pacman::p_loaded(), character.only = TRUE)
Gavinの答えに基づいていますが、完全な機能に完全ではありませんが、次のシーケンスになります。
sess.pkgs <- function (package = NULL)
{ z <- list()
if (is.null(package)) {
package <- grep("^package:", search(), value = TRUE)
keep <- sapply(package, function(x) x == "package:base" ||
!is.null(attr(as.environment(x), "path")))
package <- sub("^package:", "", package[keep])
}
pkgDesc <- lapply(package, packageDescription)
if (length(package) == 0)
stop("no valid packages were specified")
basePkgs <- sapply(pkgDesc, function(x) !is.null(x$Priority) &&
x$Priority == "base")
z$basePkgs <- package[basePkgs]
if (any(!basePkgs)) {
z$otherPkgs <- package[!basePkgs]
}
z
}
lapply(paste("package:",sess.pkgs()$otherPkgs, sep=""), detach,
character.only = TRUE, unload = TRUE)
または、RStudioを使用している場合は、[パッケージ]タブのすべてのチェックボックスをオフにして切り離します。
同じ名前の関数が互いに競合しているパッケージで問題が発生している場合、必要な関数のパッケージの名前空間をいつでも参照できます。
pkg_name::function_i_want()
ほとんどの場合、plyr
対dplyr
の問題です。コードの冒頭でこれを使用します。
detach("package:plyr", unload=TRUE)
そのため、スクリプトが実行されるたびに、plyr
パッケージがクリアされます