2016-04-26 83 views
7

我正在編織一個.Rmd文件,並希望有兩個輸出:每次我運行鍼織HTML和一個purl'ed R腳本。這可以用下面的RMD文件來完成:purl()內knit()重複標籤錯誤

--- 
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 
``` 

如果不命名塊,它工作正常,你會得到HTML和輸出.R每次運行時編織()(或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()認爲即使沒有重複時也有重複的塊名稱。

是否有辦法在.Rmd文件中包含purl()命令,以便生成兩個輸出(html和R)?還是有更好的方法來做到這一點?我的最終目標是使用新的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

雖然這是一個很好的解決方法,但這有點冒險。如果在產生數字的塊中真的存在重複的標籤(除了purl問題),則可能會丟失在具有相同名稱的不同位置生成的一些圖像。小心一點。 –