2016-04-26 1 views
7

.Rmdファイルを編成しています。ニットを実行するたびに、htmlとpurl'edされたRスクリプトの2つの出力が必要です。これは、次のRMDファイルを使用して行うことができます。knit()内の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 
``` 

あなたはチャンクに名前を付けていない場合は、それが正常に動作し、あなたが得るhtmlと.R出力あなたはニット実行するたびに()(またはRStudioにニットをクリック) 。

ただし、チャンクに名前を付けると失敗します。たとえば:あなたはpurl()呼び出しをコメントアウトした場合

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 

は、それが名前のチャンクで動作します:


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

それはで失敗します。したがって、purl()コールがどのように呼び出されて、knit()に重複がない場合でも重複したチャンク名があると考える原因となるチャンクの名前付けには何かがあります。

purl()コマンドを.Rmdファイルに含めて両方の出力(htmlとR)を生成する方法はありますか?それとももっと良い方法がありますか?私の最終的な目標は、新しいrmarkdown::render_site()を使用して、サイトがコンパイルされるたびにHTMLとRの出力を更新するWebサイトを構築することです。次のように、ファイル内のoptions(knitr.duplicate.label = 'allow')を含むことにより、重複するラベルを許可することができます

+1

あなたはこれを理解しましたか? – Jordan

+0

私もこの問題を抱えています...非常にイライラしています。私は塊を名づけたいと思います。私は今のところこれではできません。 – Nova

答えて

2

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

これは適切な回避策ですが、これは少し危険です。作成されたフィギュアの塊に実際に重複したラベルがある場合は、同じ名前の別の場所で生成された画像がいくつか失われることがあります。ちょっと注意してください。 –