2012-11-10 6 views
7

Coś takiego, ale to nie działa:Czy można udostępniać zmienne między fragmentami knitr za pomocą engine = "bash"?

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

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

To działa, jednak:

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

Chcesz złożyć raport o błędzie: https://github.com/yihui/knitr/issues – Dason

+2

Po prostu FYI, jest to możliwe z pakietem runr teraz: https://github.com/yihui/runr but Nadal muszę ją wypolerować, zanim zintegrujemy ją w knitr (przykład http://rpubs.com/yihui/bash-knitr) –

Odpowiedz

4

To jest świetne pytanie! Jest to również coś, co naprawdę chcę osiągnąć, ale nie wiem jak to zrobić (doceniam, jeśli ktoś może mi pomóc). Jest to przydatne nie tylko dla bash, ale także dla wszystkich innych silników w knitr, takich jak python, ruby i tak dalej. Powodem, dla którego nie działa w tej chwili, jest knitr po prostu uruchamia kod przez system('engine -arg code'), tj. Dla każdego fragmentu kodu, otwierana jest nowa sesja silnika, więc wszystkie porcje są zasadniczo wykonywane w różnych procesach.

Idealnie chcę silnika, który otwiera sesję i nadal słucha nowego kodu, ale nie jestem pewien, czy jest to w ogóle możliwe. AFAIK, jedynym sposobem na udostępnianie zmiennych jest zapisywanie ich w plikach, co jest oczywiście niezręczne.

+0

, więc jak to działa dla R? – nachocab

+0

Kod @nachocab R jest obsługiwany bardzo różnie: wszystkie fragmenty kodu R dzielą tę samą sesję R, więc zmienne mogą być współużytkowane w różnych fragmentach. –

+0

Jako alternatywa, możliwe byłoby wypełnianie zmiennych bash za pomocą kodu R? W ten sposób mógłbym ustawić początkowy fragment R ze wszystkimi zmiennymi, których chcę użyć i wywołać je z fragmentów engine = "bash". – nachocab