R yeniden başlatılmadan bir paket nasıl kaldırılır


540

R'yi yeniden başlatmak zorunda kalmadan bir paketi kaldırmak istiyorum (çoğunlukla farklı denediğimde R'yi yeniden başlatmak, çakışan paketler sinir bozucu oluyor, ancak muhtemelen bu bir program ve sonra başka bir işlevi kullanmak için bir programda kullanılabilir - ad alanı olmasına rağmen) kaynak gösterme muhtemelen bu kullanım için daha iyi bir fikirdir).

?library bir paketi kaldıracak hiçbir seçenek göstermez.

Paketi kaldırabilecek bir öneri var detach, ancak aşağıdakilerin ikisi de başarısız oluyor:

detach(vegan)

Hata yeri detach(vegan): geçersiz nameargüman

detach("vegan")

Hata yeri detach("vegan"): geçersiz nameargüman

Peki bir paketi nasıl kaldırabilirim?


4
@Iterator: Kütüphane, paketleri bulacağınız bir konumdur. (Bunlar eşanlamlı değildir.) .libPaths()Size sisteminizdeki tüm kitaplıkların yollarını verir.
Richie Cotton

16
@Richie: Teşekkürler. Bunu R bağlamında anlıyorum, ancak R kullanımının terimi libraryiki şekilde aşırı yüklediğini veya belirsiz hale getirdiğini hissediyorum : 1 - bu library, başka bir yerde olduğu gibi kullanılmıyor ve 2 - terim, library()yüklemek için kullanılıyor ... kütüphane, ama bir paket.
Yineleyici

2
@Iterator Haklısın. Bu ihtiyacım olan cevaptı ve googling yaparken "karşı require" ya da "geri al library" kullandım çünkü tipik olarak "paket" i böyle yüklerim. Bu yüzden düzgün bir şekilde başlık koymak soruyu daha doğru hale getirir, ancak bulmak daha zordur.
isomorphismes

Yanıtlar:


656

Bunu deneyin ( ?detachdaha fazla ayrıntı için bkz .):

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

Bir paketin aynı anda birden çok sürümü yüklü olabilir (örneğin, bir geliştirme sürümünüz ve farklı kitaplıklarda kararlı bir sürümünüz varsa). Tüm kopyaların ayrıldığından emin olmak için bu işlevi kullanın.

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)
  }
}

Kullanım, örneğin

detach_package(vegan)

veya

detach_package("vegan", TRUE)

3
@hadley Gerçekten. Belirtilmemiş sürüm, R'nin son sürümünde çalışmıyor gibi görünüyor. Kohske'nin yanıtını çözümünüzü yansıtacak şekilde güncelledim.
Ari B. Friedman

1
@ AriB. Friedman, şimdi bir soru olarak .
Eric Fail

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

5
Geçersiz bir 'ad' bağımsız değişken hatası alırsanız, character.only = TRUE ifadesini ekleyin.
Dan Tenenbaum

2
> detach ("package: kriging", unload = TRUE, character.only = T) Ayrılma hatası ("package: kriging", unload = TRUE, character.only = T): geçersiz 'ad' argümanı. Ancak @rstober çözümü işe yarıyor!
Andrew

86

unloadNamespaceKomutu şu şekilde de kullanabilirsiniz :

unloadNamespace("sqldf")

İşlev, boşaltmadan önce ad alanını ayırır.


1
@ Kohske'nin çözümü de sizin için işe yaramadıysa, bu benim için çalıştı
Wassadamo

29

RStudio'daki (paketler) onay kutusu işaretini kaldırabilirsiniz.

RStudio paketleri bölmesi


16
Bunun bir detach("package:packageToUnload", unload=TRUE)komutun yürütülmesine neden olduğunu ve zaten önerilen çözümden
Konrad

2
Ayrıca, paket rstudio install & restart (bug?) Kullanılarak yüklenmişse kutu işaretlenmez. Ancak kontrol edip işaretini kaldırabilirsiniz.
jiggunjer

9

Kohske'nin bir cevap olarak ne yazdığını denedim ve tekrar hata aldım, bu yüzden biraz arama yaptım ve benim için işe yaradı (R 3.0.2):

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

veya ayrıca

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

3
Hangi hatayı alıyorsun? Çünkü benim için çalışıyor (R 3.1). Ve ikinci çözüm aynı @ koshke'nin cevabı, sadece kaldırılmadan (yani paket ad alanı kaldırılmamış).
alko989

Aynı hatayı aldım. asıl nokta, @Kohske ile aynı çözümü verdim ama farklı paket adıyla. basitçe, paketi kullanırsanız: o zaman iyi çalışması gerekir, ancak bunu kullanmazsanız, sorudaki ile aynı hatayı alırsınız. ;)
Mehrad Mahmoudian

Bekle ... yani yüklenmemiş bir paketi kaldırmaya mı çalıştın? Ve bir hatanın olduğunu mu düşünüyorsun?
Gregor Thomas

@Gregor Downvote düğmesine basmadan önce lütfen her şeyi tekrar okur musunuz? !!! function () ve library () hemen hemen aynı şeyi yapar (bu durumda en azından), bu yüzden paket zaten yüklü !! Ben bilgi eksikliğinden sorumlu değilim !!
Mehrad Mahmoudian

8

Komut dosyaları arasında gidip gelirken, bazen bir paketi boşaltmanız gerekebilir. Şu anda yüklü olmayan bir paketi kaldırmaya çalıştığınızda görüntülenecek uyarıları önleyecek basit bir IF ifadesi.

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

Bunu bir betiğin üstüne eklemek yardımcı olabilir.

Umarım bu gününüzü yapar!


8

detach(package:PackageName) çalışır ve tırnak kullanmaya gerek yoktur.


3

Şunları yapabilirsiniz denemek bir paket (ve yanında getirdiği tüm bağımlılıkları) kullanarak kaldırmak istediğiniz tüm unloadNamespace()ama bellek izi hala devam edecektir. Ve hayır, detach("package:,packageName", unload=TRUE, force = TRUE)işe yaramayacak.

Yeni bir konsoldan veya Session > Restart Rhafızayı pryrpaketle kontrol edin :

pryr::mem_used()

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

Kontrol et 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   

SeuratPaketi yükleyelim ve yeni bellek ayak izini kontrol edelim :

library(Seurat)
pryr::mem_used()

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

Her unloadNamespace()şeyi kaldırmak için kullanalım :

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")

Şimdi kontrol et 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 

Bellek ayak izini kontrol edin :

pryr::mem_used()

# 173 MB

Ekran yayını tanıtımına bağlantı


2

Alternatif bir çözüm eklemek istiyorum. Bu çözüm, bir paketin boşaltılmasıyla ilgili sorunuza doğrudan cevap vermiyor, ancak IMHO, istediğiniz hedefe ulaşmak için daha net bir alternatif sunuyor, anladığım kadarıyla, belirtildiği gibi, isim çatışmalarından kaçınmak ve farklı işlevleri denemekle ilgileniyor:

Çoğunlukla R'yi farklı olarak denediğimde yeniden başlatmak, çatışan paketleri sinir bozucu oluyor, ancak akla yatkın bir şekilde bu bir işlev ve sonra başka bir işlevi kullanmak için bir programda kullanılabilir - ancak ad alanı başvurusu muhtemelen bu kullanım için daha iyi bir fikirdir

Çözüm

Paket with_packageüzerinden sunulan fonksiyonlar withrşunları sağlar:

paketin arama yoluna bağlanması, kodu yürütmesinin ardından paketi arama yolundan kaldırır. Paket ad olduğu değil ancak, yüksüz.

Misal

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örnekte kullanılan genel ad alanından erişilemez. Çatışmalarla başa çıkmak, paketleri yüklemek ve boşaltmaktan daha temiz bir yol olabilir.


1

Ayrıca yalnızca bir unload()kez kullanabileceğinizi unutmayın . Yeniden çalıştırmadan ikinci kez kullanırsanız library(), çok bilgilendirici olmayan hata mesajı geçersiz 'isim' argümanını alırsınız :

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

2020-05-09 tarihinde reprex paketi tarafından oluşturuldu (v0.3.0)


0

ÇIKTI penceresine gidin, ardından Paketler simgesine tıklayın ( Çizim ve Yardım simgeleri arasında bulunur ). Boşaltmak istediğiniz paketten " onay işareti / onay işareti " kaldırın .

Paketi tekrar kullanmak için paketin önüne " onay işareti veya onay işareti " koyun veya kullanın:

library (lme4)

1
Kendi özel kitaplık yolunuz yoksa olmaz. "Paketler" altında görünmüyor, bu yüzden yukarıdaki yöntemleri yapmanız gerekiyor
zazu

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.