2012-11-10 3 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

これはランナーパッケージで今すぐ可能です:https://github.com/yihui/runr私はそれをknitr(例http://rpubs.com/yihui/bash-knitr) –

答えて

4

素晴らしい質問です!それは私が実際に成したがっていることですが、それをやる方法がわかりません(誰かが私を助けることができれば感謝します)。 bashだけでなく、knitrのような他のすべてのエンジンについても、pythonrubyなどのように便利です。現在のところ動作しない理由は、knitrsystem('engine -arg code')でコードを実行するだけです。すなわち、各コードチャンクに対して新しいエンジンセッションが開かれるため、すべてのチャンクは本質的に異なるプロセスで実行されます。

理想的には、セッションを開き、新しいコードを聞き続けるエンジンが必要ですが、それが可能かどうかはわかりません。 AFAIK、変数を共有する唯一の方法は、ファイルに書き込むことです。これは明らかに厄介です。

+0

に統合する前にそれを磨く必要があるので、どのようにRのために働くのですか? – nachocab

+0

@nachocab Rコードは非常に異なって扱われます:すべてのRコードチャンクは同じRセッションを共有するので、変数はチャンク間で共有できます –

+0

代わりに、Rコードを使用してbash変数を設定できますか?こうすることで、最初のRのチャンクを、使用するすべての変数とともにengine = "bash"チャンクから呼び出すことができます。 – nachocab

関連する問題