2012-01-11 12 views
5

पर मैंने update.packages(..., checkBuilt = TRUE) के लिए सहायता देखी है और मुझे अस्पष्ट नहीं है कि कोई डिफ़ॉल्ट रूप से TRUE क्यों नहीं चाहेगा। डिफ़ॉल्ट FALSE है।आर में संकुल अपडेट करना - चेकबिल्ट = TRUE या FALSE

इस प्रश्न में दो भाग हैं। (1) क्या कोई FALSE या TRUE के लिए इस तर्क और तर्क के उपयोग की स्पष्ट व्याख्या दे सकता है?

मैं यह समझ के रूप में, अगर एक आर अपडेट हो जाता है, तो यह भिन्न परिणामों हो सकता था - अगर संकुल अद्यतन नहीं किया गया, तो FALSE स्थानीय पुस्तकालयों का कारण नहीं बनेगा, अद्यतन पैकेज के साथ संशोधित किया जाना है जबकि TRUE अधिक का कारण होगा (सभी?) पैकेज अद्यतन करने के लिए। डिफ़ॉल्ट विकल्प (FALSE) एक स्पीड लाभ प्रदान कर सकता है - कम पैकेज अपडेट किए जाएंगे। स्थिरता अनिश्चित है - आर का एक नया संस्करण नए पैकेज के साथ बेहतर काम कर सकता है, या ऐसा नहीं हो सकता है (उदाहरण के लिए यदि नए पैकेज में रिग्रेशन/बग हैं), और यह पैकेज के पुराने संस्करण के साथ काम कर सकता है या नहीं भी हो सकता है (पिछड़ा संगतता की गारंटी नहीं है)। अन्य पेशेवरों और विपक्ष मेरे लिए स्पष्ट नहीं हैं। (और मैं यहां काफी गलत हो सकता हूं - यही कारण है कि मैं भाग 1 के रूप में स्पष्टीकरण मांगता हूं।)

(2) हालांकि, अगर किसी ने आर के स्थापित संस्करण को नहीं बदला है, तो इन्हें समान नहीं होना चाहिए परिणाम? उदाहरण के लिए this post देखें जहां ऐसा लगता है कि update.packages() पर कॉल करने से समस्याएं उत्पन्न हुईं, भले ही आर का संस्करण नहीं बदला गया।

+1

के पिछले संस्करण में बनाया गया था, लेकिन कोई मेरा जवाब नहीं है: 'चेकबिल्ट' तर्क आर31400 (2004) में पेश किया गया था, यह भी देखें http://cran.r-project.org/bin/windows/base/old/2.1.0/NEWS.rw2010।उस समय, डिफ़ॉल्ट 'गलत' के साथ तर्क पेश करना मतलब था कि डिफ़ॉल्ट व्यवहार नहीं बदला जो मेरे लिए सबसे समझदार लगता है। जहां तक ​​मुझे पता है, डिफ़ॉल्ट मान बाद में कभी नहीं बदला। साथ ही, मुझे लगता है कि आर कोर इस बारे में अनिच्छुक हो सकता है कि संभावित रूप से लंबी घोषणा के रूप में घोषित कार्यों की तरह एक लंबी घोषणा की आवश्यकता होगी (और असुरक्षित उपयोगकर्ताओं के हजारों प्रश्नों का कारण बन जाएगा ...) – cbeleites

+0

@cbeleites प्रतिक्रिया देने के लिए धन्यवाद! जैसा कि आप जानते हैं - आप उस पोस्ट के लेखक हैं जिनसे मैंने लिंक किया था, इसलिए मुझे उम्मीद थी कि आप अधिक पृष्ठभूमि के साथ जुड़ सकते हैं। :) मैं इस अनिच्छा को बदलने के लिए समझता हूं - यह मूल डिफ़ॉल्ट और इसकी दृढ़ता के लिए एक व्यावहारिक स्पष्टीकरण की तरह लगता है। इसलिए, वर्तमान में, मुझे आश्चर्य है कि उपयोगकर्ताओं को डिफ़ॉल्ट को ओवरराइड करना चाहिए या नहीं। – Iterator

+0

सौ, आप डिफॉल्ट को आसानी से ओवरराइड कर सकते हैं। हालांकि मुझे लगता है कि यह 'update.packages' के प्रयास के लायक नहीं है (मैं ग्रिड आधारित साजिश के आस-पास' प्रिंट 'जैसे चीजों के लिए नियमित रूप से ऐसा करता हूं - हालांकि' स्वीवे '(' RweaveLatex') विकल्प 'प्रिंट = TRUE')। और फिर उन्हें डाउनग्रेड करने के बजाय पैकेज अपडेट करना बहुत आसान है। – cbeleites

उत्तर

4

CheckBuilt = TRUE विशेष रूप से 2.14.0 जैसे बड़े अपग्रेड के लिए उपयोगी है जो नामस्थानों में बड़े बदलाव लाए। आर के पिछले संस्करण के साथ बनाए गए नामस्थान के बिना पैकेज को फिर से संकलित किया जाना चाहिए, अन्यथा वे बिल्कुल लोड नहीं होंगे।

> library(ICE) 
Error in library(ICE) : 
    package ‘ICE’ does not have a NAMESPACE and should be re-installed 

वहाँ एक के साथ कोई नया संस्करण है के रूप में: तो आप इस तरह के एक पैकेज (जैसे ICE के रूप में) आर 2.13 में स्थापित किया है, और आप आर 2.14 के लिए अद्यतन करते, तो आप इसे अब और लोड करने के लिए सक्षम हो जाएगा नेमस्पेस, update.packages() CheckBuilt = TRUE के बिना इसे अपग्रेड नहीं करेगा। तो update.packages(checkBuilt = TRUE) कह कर, आप स्पष्ट रूप से कहते हैं, सभी संकुल यदि या तो उन्नयन:

  • क्रैन
  • या पैकेज को फिर से स्थापित पर अधिक नया संस्करण नहीं है अगर यह अनुसंधान के एक पुराने संस्करण के साथ बनाया गया था ।

यह संकुल कि आर के एक ही संस्करण में संकलित किया गया संशोधित नहीं जाएगा और बिना क्रैन पर उपलब्ध उन्नयन। चेकबिल्ट का अर्थ वास्तव में "पुराने संस्करण में संकलित होने पर पुन: स्थापित करें", "सभी संकुल को पुनः स्थापित न करें"।

डिफ़ॉल्ट रूप से यह गलत क्यों है? मुझे लगता है कि यह सीआरएएन पर एक बड़ा भार डालता है और अधिकांश समय यह जरूरी नहीं है: मैंने मामूली अपग्रेड के बाद कभी समस्या नहीं देखी है (यानी 2.1 2.1.0 से 2.13.1)। मैं निश्चित रूप से 2.13.1 से 2.14.0 जैसे किसी बड़े अपग्रेड के बाद इसे करने की अनुशंसा करता हूं।

मुझे विश्वास है कि आप निर्दिष्ट विशिष्ट मामले (2) में एक अपवाद है। इसमें आर के बजाए एपीटी के साथ स्थापित संकुल को अपग्रेड करना शामिल है। आप वास्तव में इस तरह के segfault बग के किसी भी निष्कर्ष को आकर्षित नहीं कर सकते हैं। और वैसे भी, अगर CheckBuilt = TRUE ने इसे अपग्रेड किया है, तो इसका मतलब है कि यह आर

+0

segfault के बारे में अच्छा बिंदु - यह संभवतः एक लाल हेरिंग है। – Iterator

+0

मेरे पास आर 3.2.3 स्थापित है और लगभग सभी मेरे पैकेज स्थापित किए गए हैं और आर 3.2.1 या 3.2.2 (install.packages के अनुसार) का उपयोग करके संकलित किए गए हैं। हालांकि अगर मैं update.packages करता हूं (lib.loc = .libPaths(), checkbuuilt = TRUE, ask = FALSE) लगभग कोई भी पुनर्स्थापित नहीं किया गया है .. क्यों? – lucacerone

संबंधित मुद्दे