web-dev-qa-db-ja.com

Rを再起動せずにパッケージをアンロードする方法

私はRを再起動せずにパッケージをアンロードしたいと思います(競合する別のパッケージを試すときにRを再起動するのはいらいらするからです)参照はおそらくその用途のためのより良い考えです。

?libraryはパッケージをアンロードするオプションを表示しません。

提案detachがパッケージをアンロードできるという提案がありますが、以下の両方は失敗します:

detach(vegan)

detach(vegan)のエラー:無効なname引数

detach("vegan")

detach("vegan")のエラー:無効なname引数

それでは、どうすればパッケージをアンロードできますか?

457
Ari B. Friedman

これを試してください(詳細については?detachを参照してください)。

detach("package:vegan", unload=TRUE)

一度に複数のバージョンのパッケージをロードすることができます(たとえば、開発版と安定版が異なるライブラリにある場合)。すべてのコピーが確実に切り離されるようにするには、この機能を使用します。

detach_package <- function(pkg, character.only = FALSE)
{
  if(!character.only)
  {
    pkg <- deparse(substitute(pkg))
  }
  search_item <- paste("package", pkg, sep = ":")
  while(search_item %in% search())
  {
    detach(search_item, unload = TRUE, character.only = TRUE)
  }
}

使い方は、例えば

detach_package(vegan)

または

detach_package("vegan", TRUE)
572
kohske

次のように、unloadNamespaceコマンドを使用することもできます。

unloadNamespace("sqldf")

この関数は、名前空間をアンロードする前に名前空間をデタッチします。

69
rstober

rStudio(packages)のチェックボックスのチェックを外すことができます

24
Ajay Ohri

Kohskeが答えとして書いたものを試してみたところ、またエラーが出たので、検索してみたところ、これがうまくいった(R 3.0.2)。

require(splines) # package
detach(package:splines)

または

library(splines)
pkg <- "package:splines"
detach(pkg, character.only = TRUE)
8

スクリプト間を行ったり来たりするときには、パッケージをアンロードするのに必要なのは 時々 だけです。これは、現在ロードされていないパッケージをアンロードしようとした場合に表示される警告を防ぐための簡単なIFステートメントです。

if("package:vegan" %in% search()) detach("package:vegan", unload=TRUE) 

これをスクリプトの先頭に含めると便利です。

私はそれがあなたの日になることを願っています!

7
dca

detach(package:PackageName)は機能し、引用符を使う必要はありません。

6
Alper Gur

代替ソリューションを追加したいと思います。このソリューションは、パッケージのアンロードに関する質問には直接答えませんが、私見では、目的の目標を達成するためのよりクリーンな代替手段を提供します。述べられているように、さまざまな機能を試す

主に、異なる競合パッケージを試してRを再起動するとイライラしますが、おそらくこれをプログラムで使用して1つの関数を使用し、別の関数を使用することができます-名前空間の参照はおそらくその使用のためのより良いアイデアです

溶液

関数 with_packagewithr を介して提供されるパッケージは、次の可能性を提供します。

パッケージを検索パスに添付し、コードを実行してから、パッケージを検索パスから削除します。ただし、パッケージの名前空間はnotアンロードされます。

library(withr)
with_package("ggplot2", {
  ggplot(mtcars) + geom_point(aes(wt, hp))
})
# Calling geom_point outside withr context 
exists("geom_point")
# [1] FALSE

例で使用されているgeom_pointは、グローバル名前空間からアクセスできません。パッケージをロードおよびアンロードするよりも、競合を処理するよりクリーンな方法かもしれないと思います。

0
Konrad

OUTPUTウィンドウに行き、そしてPackagesアイコンをクリックしてください( PlotとHelp iconsの間にあります)。アンロードしたいパッケージから " tick/check mark "を削除してください。

再度パッケージを使用するには、単にパッケージの前に「 チェックマークまたはチェックマーク 」を入れるか、次のように使用します。

library (lme4)
0
EsKe