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


540

Rを再起動せずにパッケージをアンロードしたいと思います(主に、異なる競合するパッケージを試すときにRを再起動することは不満を感じるためですが、おそらくこれはプログラムで1つの関数を使用して別の関数を使用する可能性があります-名前空間は参照はおそらくその使用のためのより良いアイデアです)。

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

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

detach(vegan)

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

detach("vegan")

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

では、パッケージをアンロードするにはどうすればよいですか?


4
@イテレーター:ライブラリは、パッケージを見つける場所です。(これらは同義ではありません。).libPaths()システム上のすべてのライブラリへのパスを提供します。
リッチーコットン

16
@Richie:ありがとう。私はそれをRのコンテキストで取得しますが、Rの使用が過負荷になるか、用語をあいまいにするlibrary2つの方法で感じる:1- library他の場所と同じように使用されlibrary()ていない、2-用語がロードに使用されている...ライブラリ、しかしパッケージ。
イテレータ2011

2
@イテレーターあなたは正しいです。これは私が必要とする答えでした。グーグルするときは、「反対のrequire」または「元に戻すlibrary」を使用しました。これが、通常、「パッケージ」をロード、エラー、ロードする方法だからです。したがって、適切にタイトルを付けると、質問がより正確になりますが、見つけにくくなります。
同型写像

回答:


656

これを試してください(詳細?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)

3
@hadley確かに。引用符で囲まれていないバージョンは、Rの最新バージョンでは機能しないようです。ソリューションを反映するために、kohskeの回答を更新しました。
アリB.フリードマン

1
@ AriB.Friedman、今質問として
Eric Fail

1
> detach("package:MASS", unload=TRUE) Error in detach("package:MASS", unload = TRUE) : invalid 'name' argument
Mona Jalal 14

5
無効な「名前」引数エラーが発生した場合は、character.only = TRUEを追加してください。
Dan Tenenbaum、2014

2
> detach( "package:kriging"、unload = TRUE、character.only = T)detach( "package:kriging"、unload = TRUE、character.only = T)のエラー:無効な 'name'引数。ただし、@ rstoberソリューションは機能します。
Andrew

86

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

unloadNamespace("sqldf")

この関数は、名前空間をアンロードする前に切り離します。


1
@kohskeの解決策もうまくいかなかった場合、これは私にとって
うまくいき

29

RStudio(パッケージ)のチェックボックスボタンをオフにすることができます。

RStudioパッケージペイン


16
これによりdetach("package:packageToUnload", unload=TRUE)コマンドが実行され、すでに提案されているソリューション
Konrad

2
また、パッケージがrstudio install&restartを使用してロードされた場合、ボックスはチェックされません(バグ?)。ただし、チェックを入れたり外したりするだけです。
jiggunjer

9

kohskeが答えとして書いたものを試しましたが、もう一度エラーが発生したので、検索を行ったところ、これがうまくいったことがわかりました(R 3.0.2)。

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

またはまた

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

3
どのようなエラーが発生しますか?それは私のために働くので(R 3.1)。そして、2番目の解決策は、@ koshkeの答えと同じですが、アンロードなしのみです(したがって、パッケージの名前空間はアンロードされません)。
alko989 2014年

同じエラーが発生しました。重要なのは、@ Kohskeと同じ解決策を提供しましたが、パッケージ名が異なります。これは単に、パッケージを使用する場合は問題なく機能することを意味しますが、使用しない場合は、質問と同じエラーが発生します。;)
Mehrad Mahmoudian 2014

ちょっと待って…それで、ロードさえされていないパッケージをアンロードしようとしましたか?そして、あなたはあなたがエラーに驚いたのですか?
グレゴールトーマス

@Gregor反対投票ボタンを押す前に、もう一度すべて読んでください。!!! 関数require()とlibrary()はほぼ同じ(この場合は)なので、パッケージはすでにロードされています!! 私はあなたの情報不足について責任を負いません!!
Mehrad Mahmoudian 2015

8

スクリプト間を行き来する場合、パッケージをアンロードする必要がある場合があります。以下は、現在ロードされていないパッケージをアンロードしようとした場合に表示される警告を防ぐ単純なIFステートメントです。

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

これをスクリプトの上部に含めると役立つ場合があります。

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



3

を使用して、パッケージを削除したいすべて(およびパッケージと一緒に持ってきたすべての依存関係)を試すことができますunloadNamespace()が、メモリフットプリント保持されます。そして、いいえ、detach("package:,packageName", unload=TRUE, force = TRUE)どちらも動作しません。

新しいコンソールから、またはパッケージでSession > Restart Rメモリを確認しpryrます。

pryr::mem_used()

# 40.6 MB   ## This will depend on which packages are loaded obviously (can also fluctuate a bit after the decimal)

私のチェック sessionInfo()

R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17763)

Matrix products: default

locale:
[1] LC_COLLATE=English_Canada.1252  LC_CTYPE=English_Canada.1252    LC_MONETARY=English_Canada.1252 LC_NUMERIC=C                   
[5] LC_TIME=English_Canada.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.6.1   pryr_0.1.4       magrittr_1.5     tools_3.6.1      Rcpp_1.0.3       stringi_1.4.3    codetools_0.2-16 stringr_1.4.0   
[9] packrat_0.5.0   

Seuratパッケージをロードして、新しいメモリフットプリントを確認してみましょう。

library(Seurat)
pryr::mem_used()

# 172 MB    ## Likely to change in the future but just to give you an idea

unloadNamespace()すべてを削除するために使用してみましょう:

unloadNamespace("Seurat")
unloadNamespace("ape")
unloadNamespace("cluster")
unloadNamespace("cowplot")
unloadNamespace("ROCR")
unloadNamespace("gplots")
unloadNamespace("caTools")
unloadNamespace("bitops")
unloadNamespace("fitdistrplus")
unloadNamespace("RColorBrewer")
unloadNamespace("sctransform")
unloadNamespace("future.apply")
unloadNamespace("future")
unloadNamespace("plotly")
unloadNamespace("ggrepel")
unloadNamespace("ggridges")
unloadNamespace("ggplot2")
unloadNamespace("gridExtra")
unloadNamespace("gtable")
unloadNamespace("uwot")
unloadNamespace("irlba")
unloadNamespace("leiden")
unloadNamespace("reticulate")
unloadNamespace("rsvd")
unloadNamespace("survival")
unloadNamespace("Matrix")
unloadNamespace("nlme")
unloadNamespace("lmtest")
unloadNamespace("zoo")
unloadNamespace("metap")
unloadNamespace("lattice")
unloadNamespace("grid")
unloadNamespace("httr")
unloadNamespace("ica")
unloadNamespace("igraph")
unloadNamespace("irlba")
unloadNamespace("KernSmooth")
unloadNamespace("leiden")
unloadNamespace("MASS")
unloadNamespace("pbapply")
unloadNamespace("plotly")
unloadNamespace("png")
unloadNamespace("RANN")
unloadNamespace("RcppAnnoy")
unloadNamespace("tidyr")
unloadNamespace("dplyr")
unloadNamespace("tibble")
unloadNamespace("RANN")
unloadNamespace("tidyselect")
unloadNamespace("purrr")
unloadNamespace("htmlwidgets")
unloadNamespace("htmltools")
unloadNamespace("lifecycle")
unloadNamespace("pillar")
unloadNamespace("vctrs")
unloadNamespace("rlang")
unloadNamespace("Rtsne")
unloadNamespace("SDMTools")
unloadNamespace("Rdpack")
unloadNamespace("bibtex")
unloadNamespace("tsne")
unloadNamespace("backports")
unloadNamespace("R6")
unloadNamespace("lazyeval")
unloadNamespace("scales")
unloadNamespace("munsell")
unloadNamespace("colorspace")
unloadNamespace("npsurv")
unloadNamespace("compiler")
unloadNamespace("digest")
unloadNamespace("R.utils")
unloadNamespace("pkgconfig")
unloadNamespace("gbRd")
unloadNamespace("parallel")
unloadNamespace("gdata")
unloadNamespace("listenv")
unloadNamespace("crayon")
unloadNamespace("splines")
unloadNamespace("zeallot")
unloadNamespace("reshape")
unloadNamespace("glue")
unloadNamespace("lsei")
unloadNamespace("RcppParallel")
unloadNamespace("data.table")
unloadNamespace("viridisLite")
unloadNamespace("globals")

今チェックしてくださいsessionInfo()

R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17763)

Matrix products: default

locale:
[1] LC_COLLATE=English_Canada.1252  LC_CTYPE=English_Canada.1252    LC_MONETARY=English_Canada.1252 LC_NUMERIC=C                   
[5] LC_TIME=English_Canada.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
 [1] tools_3.6.1       stringr_1.4.0     rstudioapi_0.10   pryr_0.1.4        jsonlite_1.6      gtools_3.8.1      R.oo_1.22.0      
 [8] magrittr_1.5      Rcpp_1.0.3        R.methodsS3_1.7.1 stringi_1.4.3     plyr_1.8.4        reshape2_1.4.3    codetools_0.2-16 
[15] packrat_0.5.0     assertthat_0.2.1 

メモリフットプリントを確認します

pryr::mem_used()

# 173 MB

スクリーンキャストデモへのリンク


2

代替ソリューションを追加したいと思います。このソリューションは、パッケージのアンロードに関する質問に直接回答しませんが、IMHOは、目的の目標を達成するためのより明確な代替手段を提供します。これは、名前の競合の回避とさまざまな機能の試行に広く関わっています。

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

解決

パッケージwith_packageを介して提供される機能により、次のwithrことが可能になります。

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

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例で使用されているものは、グローバル名前空間からアクセスできません。私はそれがパッケージのロードとアンロードよりも競合を処理するよりクリーンな方法かもしれないと思います。


1

また、unload()一度しか使用できないことに注意してください。再library()実行せずに2回使用すると、あまり意味のないエラーメッセージの無効な「名前」引数が表示されます

library(vegan)
#> Loading required package: permute
#> Loading required package: lattice
#> This is vegan 2.5-6
detach("package:vegan",  unload=TRUE)
detach("package:vegan",  unload=TRUE)
#> Error in detach("package:vegan", unload = TRUE): invalid 'name' argument

reprexパッケージ(v0.3.0)によって2020-05-09に作成されました


0

出力ウィンドウに移動し、パッケージアイコンをクリックします(プロットアイコンとヘルプアイコンの間にあります)。アンロードするパッケージから「チェック/チェックマーク」を削除します。

もう一度パッケージを使用するには、パッケージの前に「チェックマークまたはチェックマーク」を付けるか、次のように使用します。

library (lme4)

1
独自のカスタムライブラリパスがない限り、そうではありません。「パッケージ」の下には表示されないため、上記の方法を実行する必要があります
zazu

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.