R को पुनरारंभ किए बिना किसी पैकेज को कैसे उतारना है


540

मैं आर को पुनरारंभ किए बिना एक पैकेज को अनलोड करना चाहता हूं (ज्यादातर इसलिए कि आर को पुनरारंभ करने के रूप में मैं अलग-अलग कोशिश करता हूं, परस्पर विरोधी पैकेज निराशाजनक हो रहा है, लेकिन यह एक कार्यक्रम का उपयोग करने के लिए एक कार्यक्रम में इस्तेमाल किया जा सकता है और फिर दूसरा - हालांकि नाम स्थान संदर्भित करना शायद उस उपयोग के लिए एक बेहतर विचार है)।

?library कोई भी विकल्प नहीं दिखाता है जो पैकेज को अनलोड करेगा।

एक सुझाव है कि detachपैकेज को अनलोड किया जा सकता है, लेकिन निम्नलिखित दोनों विफल होते हैं:

detach(vegan)

इसमें त्रुटि detach(vegan): अमान्य nameतर्क

detach("vegan")

इसमें त्रुटि detach("vegan"): अमान्य nameतर्क

तो मैं एक पैकेज को कैसे उतारूं?


4
@ सूचक: एक पुस्तकालय वह स्थान है जहाँ आपको पैकेज मिलते हैं। (वे समानार्थी नहीं हैं।) .libPaths()आपको अपने सिस्टम पर सभी पुस्तकालयों के लिए मार्ग देता है।
रिची कॉटन

16
@ रीची: धन्यवाद। मुझे वह R संदर्भ में मिलता है, लेकिन मुझे लगता है कि R उपयोग ओवरलोड करता है या शब्द libraryको दो तरीकों से अस्पष्ट बनाता है: 1 - यह libraryकहीं और के समान उपयोग नहीं है, और 2 - यह शब्द library()लोड करने के लिए उपयोग किया जाता है ... नहीं पुस्तकालय, लेकिन एक पैकेज।
Iterator

2
@ संकेतक आप सही हैं। यह वह उत्तर था जिसकी मुझे आवश्यकता थी, और जब गुग्लिंग मैंने require"या" पूर्ववत library"के विपरीत प्रयोग किया था, क्योंकि इसी तरह मैं आम तौर पर लोड करता हूं," पैकेज "। इसलिए इसे ठीक से शीर्षक देने से प्रश्न अधिक सही हो जाता है, लेकिन यह कठिन भी है।
isomorphismes

जवाबों:


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
@ हडले इं। निर्विवाद संस्करण आर के नवीनतम संस्करण में काम नहीं करता है। मैंने आपके समाधान को प्रतिबिंबित करने के लिए कोह्सके के उत्तर को अपडेट किया है।
अरी बी। फ्रीडमैन


1
> detach("package:MASS", unload=TRUE) Error in detach("package:MASS", unload = TRUE) : invalid 'name' argument
मोना जलाल

5
यदि आपको एक अमान्य 'नाम' तर्क त्रुटि मिलती है, तो character.only = TRUE जोड़ें।
डैन तेनबाम

2
> detach ("पैकेज: kriging", unload = TRUE, character.only = T) detach में त्रुटि ("पैकेज: kriging", अनलोड = TRUE, character.only = T): अमान्य 'नाम' तर्क। हालाँकि @rstober समाधान काम करता है!
एंड्रयू

86

आप unloadNamespaceकमांड का भी उपयोग कर सकते हैं , जैसे कि:

unloadNamespace("sqldf")

फ़ंक्शन नामस्थान को अनलोड करने से पहले अलग कर देता है।


1
मामले में @ कोह्सके समाधान ने भी आपके लिए काम नहीं किया, यह मेरे लिए काम किया
वासादामो

29

आप RStudio (संकुल) में चेकबॉक्स बटन को अनचेक कर सकते हैं।

RStudio संकुल फलक


16
यह जोड़ने योग्य है कि यह detach("package:packageToUnload", unload=TRUE)कमांड निष्पादित होने के परिणामस्वरूप होता है और पहले से प्रस्तावित समाधान के
कोनराड

2
यदि पैकेज rstudio स्थापित और पुनः आरंभ (बग?) का उपयोग करके लोड किया गया है, तो भी, बॉक्स को चेक नहीं किया गया है। लेकिन आप इसे चेक और अनचेक कर सकते हैं।
जिगगंजर

9

मैंने कोशिश की कि कोहसे ने एक उत्तर के रूप में क्या लिखा और मुझे फिर से त्रुटि हुई, इसलिए मैंने कुछ खोज की और यह पाया जो मेरे लिए काम किया (आर 3.0.2):

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

या भी

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

3
आपको क्या त्रुटि मिल रही है? क्योंकि यह मेरे लिए काम करता है (आर 3.1)। और दूसरा समाधान समान @ कोशे का उत्तर है, केवल अनलोड के बिना (इसलिए पैकेज नेमस्पेस अनलोड नहीं है)।
एल्को 989

मुझे भी यही त्रुटि मिली। बिंदु मैंने @Kohske के समान ही समाधान दिया है, लेकिन विभिन्न पैकेज नाम के साथ। इसका सीधा सा मतलब है कि यदि आप पैकेज का उपयोग करते हैं: तो उसे ठीक काम करना चाहिए, लेकिन यदि आप उसका उपयोग नहीं करते हैं, तो आपको प्रश्न के समान त्रुटि मिलेगी। ;)
मेहद महमूदियन

रुकिए ... तो आपने एक ऐसे पैकेज को उतारने की कोशिश की जो लोड भी नहीं था? और आपको आश्चर्य है कि आपको कोई त्रुटि मिली है?
ग्रेगर थॉमस

@Gregor क्या आप डाउनवोट बटन दबाने से पहले फिर से सब कुछ पढ़ लेंगे? !!! फ़ंक्शन की आवश्यकता होती है () और लाइब्रेरी () इस मामले में लगभग समान (कम से कम) है, इसलिए पैकेज पहले से ही लोड है !! मैं जानकारी की कमी के लिए जिम्मेदार नहीं हूँ !!
मेह्रद महमूदियन

8

जब आप स्क्रिप्ट के बीच आगे-पीछे जा रहे हों तो कभी-कभी पैकेज को उतारना आवश्यक हो सकता है। यहाँ एक सरल IF स्टेटमेंट है जो चेतावनी को रोकेगा यदि आप उस पैकेज को अनलोड करने का प्रयास करते हैं जो वर्तमान में लोड नहीं था।

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

स्क्रिप्ट के शीर्ष पर इसे शामिल करना सहायक हो सकता है।

मुझे उम्मीद है कि आपका दिन बना!


8

detach(package:PackageName) काम करता है और उद्धरण का उपयोग करने की कोई आवश्यकता नहीं है।


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, आपके इच्छित लक्ष्य को प्राप्त करने के लिए एक क्लीनर विकल्प प्रदान करता है, जिसे मैं समझता हूं, मोटे तौर पर नाम के टकराव से बचने और विभिन्न कार्यों की कोशिश करने के साथ संबंधित है, जैसा कि कहा गया है:

ज्यादातर क्योंकि आर को पुनरारंभ करने के रूप में मैं अलग-अलग कोशिश करता हूं, परस्पर विरोधी पैकेज निराशाजनक हो रहे हैं, लेकिन एक कार्यक्रम का उपयोग करने के लिए एक प्रोग्राम में इसका इस्तेमाल किया जा सकता है और फिर दूसरा - हालांकि नाम स्थान का संदर्भ शायद उस उपयोग के लिए एक बेहतर विचार है।

समाधान

पैकेज के 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(), मिल y'll नहीं बहुत जानकारीपूर्ण त्रुटि संदेश अमान्य 'नाम' तर्क :

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

रेप्रेक्स पैकेज (v0.3.0) द्वारा 2020-05-09 को बनाया गया


0

बस OUTPUT विंडो पर जाएं, फिर संकुल आइकन पर क्लिक करें (यह प्लॉट और हेल्प आइकन के बीच स्थित है )। जिस पैकेज को आप अनलोड करना चाहते थे, उससे " टिक / चेक मार्क " हटा दें ।

पैकेज का उपयोग करने के लिए, पैकेज या उपयोग के सामने सिर्फ एक " टिक या चेक मार्क " डालें :

library (lme4)

1
नहीं जब तक कि आपके पास अपना स्वयं का कस्टम लाइब्रेरी पथ न हो। यह "पैकेज" के तहत प्रदर्शित नहीं होता है, इसलिए आपको उपरोक्त विधियों को करना होगा
zazu

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.