2016-04-26 13 views
7

मैं एक आरएमडी फ़ाइल बुनाई कर रहा हूं और दो आउटपुट चाहता हूं: हर बार जब मैं बुनाई करता हूं तो एचटीएमएल और एक purled आर स्क्रिप्ट। यह निम्नलिखित RMD फाइल के साथ किया जा सकता है:purl() बुनाई के अंदर() डुप्लिकेट लेबल त्रुटि

--- 
title: "Purl MWE" 
output: html_document 
--- 

```{r} 
## This chunk automatically generates a text .R version of this script when  running within knitr. 
input = knitr::current_input() # filename of input document 
output = paste(tools::file_path_sans_ext(input), 'R', sep = '.') 
knitr::purl(input,output,documentation=1,quiet=T) 
``` 

```{r} 
x=1 
x 
``` 

आप हिस्सा नामित नहीं करते हैं, यह ठीक काम करता है और आपको मिल एचटीएमएल और आर उत्पादन हर बार जब आप बुनी रन() (या RStudio में बुनी क्लिक करें) ।

हालांकि, यदि आप खंड का नाम देते हैं तो यह विफल हो जाता है। उदाहरण के लिए:


title: "Purl MWE" 
output: html_document 
--- 

```{r} 
## This chunk automatically generates a text .R version of this script when  running within knitr. 
input = knitr::current_input() # filename of input document 
output = paste(tools::file_path_sans_ext(input), 'R', sep = '.') 
knitr::purl(input,output,documentation=1,quiet=T) 
``` 


```{r test} 
x=1 
x 
``` 

यह विफल रहता है के साथ:

Quitting from lines 7-14 (Purl.Rmd) 
Error in parse_block(g[-1], g[1], params.src) : duplicate label 'test' 
Calls: <Anonymous> ... process_file -> split_file -> lapply -> FUN -> parse_block 
Execution halted 

तुम बाहर टिप्पणी तो purl() कॉल, यह नामित हिस्सा साथ काम करेंगे। तो इस बारे में कुछ है कि purl() कॉल भी नामकरण कर रहा है जो knit() का कारण बनता है ताकि डुप्लीकेट चंक नाम हों, भले ही कोई डुप्लिकेट न हो।

क्या एक आरएमडी फ़ाइल के अंदर purl() कमांड शामिल करने का कोई तरीका है ताकि दोनों आउटपुट (एचटीएमएल और आर) का उत्पादन हो? या ऐसा करने का एक बेहतर तरीका है? मेरा अंतिम लक्ष्य नई rmarkdown::render_site() का उपयोग ऐसी वेबसाइट बनाने के लिए है जो प्रत्येक बार साइट संकलित होने पर HTML और R आउटपुट अपडेट करता है।

+1

क्या आपने कभी यह पता लगाया है? – Jordan

+0

मुझे यह समस्या भी है ... बहुत निराशाजनक। मैं अपने हिस्से का नाम देना चाहता हूं और मैं वर्तमान में इस वजह से नहीं कर सकता। – Nova

उत्तर

2

इस प्रकार आप फ़ाइल के भीतर options(knitr.duplicate.label = 'allow') शामिल करके डुप्लिकेट लेबल की अनुमति कर सकते हैं:

title: "Purl MWE" 
output: html_document 
--- 

```{r GlobalOptions} 
options(knitr.duplicate.label = 'allow') 
``` 


```{r} 
## This chunk automatically generates a text .R version of this script when  running within knitr. 
input = knitr::current_input() # filename of input document 
output = paste(tools::file_path_sans_ext(input), 'R', sep = '.') 
knitr::purl(input,output,documentation=1,quiet=T) 
``` 


```{r test} 
x=1 
x 
``` 

इस कोड knitr वेबसाइट पर दर्ज नहीं किया है, लेकिन आप नवीनतम Github से प्रत्यक्ष परिवर्तन के साथ ट्रैक रख सकते हैं: https://github.com/yihui/knitr/blob/master/NEWS.md

+1

हालांकि यह एक अच्छा कामकाज है, यह थोड़ा जोखिम भरा है। यदि उत्पादित आंकड़ों के साथ वास्तव में डुप्लीकेट लेबल (पर्ल समस्या के अलावा) हैं, तो आप एक ही नाम के साथ विभिन्न स्थानों पर उत्पादित कुछ छवियां खो सकते हैं। बस थोड़ा सावधान रहें। –

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