2012-11-10 59 views
7

這樣的事情,但它不工作:是否可以使用engine =「bash」在knitr塊之間共享變量?

```{r examples, engine="bash"} 
    export EXAMPLES="example/path" 
``` 

```{r example1, engine="bash"} 
    echo $EXAMPLES 
``` 

這個工作,但是:

```{r examples2, engine="bash"} 
    export EXAMPLES="example/path" 
    echo $EXAMPLES 
``` 
+0

你想要提交一個錯誤報告:https://github.com/yihui/knitr/issues – Dason

+2

只是FYI,現在可以使用runr軟件包:https://github.com/yihui/runr但是在將它集成到knitr之前,我仍然需要磨光它(例如http://rpubs.com/yihui/bash-knitr) –

回答

4

這是一個很大的問題!這也是我真正想要完成的事情,但不知道該怎麼做(我很感謝有人能幫助我)。它不僅適用於bash,還適用於knitr中的所有其他引擎,如python,ruby等。其目前不起作用的原因是knitr僅通過system('engine -arg code')運行代碼,即對於每個代碼塊,打開新的引擎會話,因此所有的塊基本上在不同的進程中執行。

理想情況下,我想要一個引擎打開一個會話,並不斷聽新代碼,但我不確定這是否可能。 AFAIK,共享變量的唯一方式是將它們寫入文件,這顯然很尷尬。

+0

因此,它對R的工作原理如何? – nachocab

+0

@nachocab R代碼的處理方式非常不同:所有R代碼塊共享相同的R會話,因此變量可以跨塊共享 –

+0

作爲替代選擇,是否可以使用R代碼填充bash變量?這樣我就可以用我想要使用的所有變量設置一個初始R塊,並從engine =「bash」塊中調用它們。 – nachocab