2015-03-10 8 views
7

मैं वर्तमान में एक जेएसएस लेख परिवर्तित कर रहा हूं, जो knitr का उपयोग करता है, एक आर पैकेज विग्नेट पर। हालांकि, मुझे विग्नेट प्लेसमेंट, स्ट्रक्चर, और मुझे कितने लंबे गणना गणना समयों को संभालना चाहिए, यह सामान्य लैपटॉप पर ~ 2 दिन की आवश्यकता है।कम्प्यूटेशनल रूप से भारी आर vignettes

official documentation इस बारे में कोई जानकारी नहीं देता है। mailing list में एक उत्तर में एक छोटा सा नोट खोज करते समय मुझे मिलती एकमात्र जानकारी है। ब्रायन रिप्ले यहाँ लिखते हैं:

विशेष रूप से, क्रैन Sweave विगनेट्स कि जाँच के लिए भी देर साथ संकुल स्वीकार करता है - एक सीए 8 घंटे लगते हैं [...]। हम सिर्फ इतना पूछते हैं कि हमें सबमिशन पर बताया गया है।

विगनेट्स की Hadley Wickham's description हिस्सा विकल्प के रूप में स्थापित करने के लिए eval = FALSE कहते हैं। हालांकि, यह मेरे मामले में व्यवहार्य दृष्टिकोण नहीं है क्योंकि गणना से उत्पन्न डेटा की आवश्यकता है।

This presentation सुझाव देता है कि /inst/doc का उपयोग पूर्व-संकलित और भारी विगेट्स के लिए किया जाना चाहिए। हालांकि, पैकेज vignettes (या क्या?) के लिए /vignettes का उपयोग करने के नए दिशानिर्देशों के साथ यह बहुत अच्छी तरह से सहमत नहीं है।

वर्तमान में, मैंने अपनी स्रोत फ़ाइलों को /vignettes में रखा है और मैं .RData फ़ाइल बनाता हूं जिसमें सबसे अधिक कम्प्यूटेशनल रूप से महंगे वस्तुएं हैं (और जो भी काफी बड़ी है)। स्क्रिप्ट तब जांचें कि क्या ऑब्जेक्ट .RData फ़ाइल के माध्यम से उपलब्ध हैं, यदि नहीं, ऑब्जेक्ट बनाए जाते हैं। तो पूरी तरह से स्क्रैच से संकलित और चलाएं, .RData फ़ाइल को हटाया जा सकता है।

क्या किसी को इस समस्या के बारे में कुछ अनुभव या संकेतक हैं? क्या विग्नेट /vignettes या /inst/doc में होना चाहिए? यदि पूर्व को प्राथमिकता दी जाती है, तो मैं .bib, .RData इत्यादि जैसी आवश्यक फ़ाइलों को कहां रखूं? मुझे स्वीकार करना होगा कि मुझे /vignettes बनाम /inst/doc कुछ हद तक भ्रमित लगता है।

+1

दुर्भाग्य से, यह वास्तव में एक क्रैन नीति सवाल है, नहीं एक प्रोग्रामिंग सवाल है। सबसे अच्छा जवाब ईमेल से सीआरएएन में आने वाला है। आप आर-डेवेल भी कोशिश कर सकते हैं, लेकिन मुझे संदेह है कि वे आपको सीआरएएन से पूछने के लिए भी बताएंगे। – Thomas

+0

@ थॉमस हाँ, मैं अब देखता हूं। मुझे लगता है कि यह भी सीआरएएन रखरखाव को परेशान करने से बचने का प्रयास था (जो मुझे यकीन है कि पहले से ही बहुत कम समय है) और यह सुनकर कि दूसरों ने इसी तरह की समस्याओं को कैसे संभाला है। यदि यह अनुचित नहीं है, तो मैं यहां प्रश्न छोड़ दूंगा और कुछ भी नहीं होने पर रखरखावकर्ताओं को ईमेल कर दूंगा। –

+1

समझ में आता है। अगर आपको सीआरएएन से कोई जवाब मिलता है, तो मैं आपको प्रतिक्रिया पोस्ट करने के लिए प्रोत्साहित करता हूं ताकि अन्य इसे ढूंढ सकें। वे व्यस्त लोग हैं, लेकिन यह सिस्टम को बनाए रखने के लिए उनकी (ज्यादातर स्वयं नियुक्त) नौकरी भी है, इसलिए यदि उनकी सहायता फाइलें स्पष्ट नहीं हैं, तो चीजों को स्पष्ट करने की उनकी ज़िम्मेदारी है। – Thomas

उत्तर

1

मैं knitr- आधारित विगनेट्स के लिए निम्न समाधान प्रस्तुत करता हूं। मुझे लगता है कि आप पैकेज रखरखाव के लिए devtools का उपयोग कर रहे हैं। पैकेज चेक (। यानी R CMD check) जो आप computationally भारी विगनेट्स शामिल करने देगा दौरान शब्दचित्र कोड चलने से आर रोकने के लिए, शब्दचित्र करना होगा:

  1. रोजगार एक शब्दचित्र इंजन है कि आर कोड उलझन नहीं है। दूसरे शब्दों में, जब आप devtools::build_vignettes() निष्पादित करते हैं तो इंजन inst/doc में .R फ़ाइलों का उत्पादन नहीं करना चाहिए। knitr पैकेज ऐसे इंजन प्रदान करता है जो knitr::rmarkdown_notangle सहित आर कोड को उलझन में नहीं डालते हैं जिनका उपयोग knitr::rmarkdown के प्रतिस्थापन में एक बूंद के रूप में किया जा सकता है।
  2. कोड शामिल करें जो गतिशील रूप से खंड मूल्यांकन को अक्षम करता है जब यह पता चलता है कि इसे R CMD check पर कॉल के भीतर निष्पादित किया जा रहा है। यह विगनेट के शीर्ष पर कोड डालकर हासिल किया जा सकता है जो उपयुक्त होने पर knitr::opts_chunk$set(eval = ...) का उपयोग करके विभिन्न सेटिंग्स और सेटिंग चंक सेटिंग्स की जांच करता है। नीचे दिखाया गया कोड knitr पैकेज से उधार लिया गया था, इसलिए यह करने के लिए काम करने के लिए यहुई ज़ी के बहुत सारे धन्यवाद।

नीचे इन दो रणनीतियों इतना है कि यह devtools::build_vignettes() का उपयोग कर बनाया जा सकता है और इसके कोड R CMD check के दौरान निष्पादित नहीं होगा का उपयोग करता है एक rmarkdown शब्दचित्र फ़ाइल का एक उदाहरण है। ध्यान दें कि कोड अभी भी पैकेज (जैसे। जो devtools::build() और devtools::check() दौरान किया जाता है) के निर्माण, जबकि निष्पादित किया जाता है।

--- 
title: "example vignette" 
output: 
    rmarkdown::html_document: 
    self_contained: yes 
fontsize: 11pt 
documentclass: article 
vignette: > 
    %\VignetteIndexEntry{example vignette} 
    %\VignetteEngine{knitr::rmarkdown_notangle} 
--- 

```{r, include = FALSE} 
is_check <- ("CheckExEnv" %in% search()) || any(c("_R_CHECK_TIMINGS_", 
      "_R_CHECK_LICENSE_") %in% names(Sys.getenv())) 
knitr::opts_chunk$set(eval = !is_check) 
``` 

```{r} 
Sys.sleep(100) 
``` 

जंगली, see this vignette for a developmental package on GitHub में इस दृष्टिकोण के उदाहरणों के लिए।

+0

उत्तर के लिए धन्यवाद, मैं अपने पैकेजों में से किसी एक के लिए 'rmarkdown_notangle' का उपयोग करता हूं, और यह विंडोज़ के लिए काम करता है लेकिन' लिनक्स और न ही मैक के लिए काम करते हैं। मैं इस तरह की समस्या से मुलाकात की: । और मैं 'knitr' का नवीनतम संस्करण उपयोग करता हूं जो CRAN पर 1.17 है। क्या तुम्हारे पास कोई विचार है? – Consistency

+0

कोई विचार माफ करना, 'उबंटू 16.04 पर मेरे लिए knitr 1.17 कार्यों में rmarkdwon_notangle'। एकमात्र चीज जिसे मैं सोच सकता हूं वह गीथूब पर बुनाई के देव संस्करण की कोशिश कर रहा है? – paleo13

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