Knitr — опция кеша движка Python не работает

yihui приводит пример использования опции кеша для разных движков

https://github.com/yihui/knitr-examples/blob/master/023-engine-python.Rmd

Я не могу заставить его работать на python.

Следующие работы

```{r,engine='python',cache=TRUE}
x=10
print x
```

Но это не работает

```{r,engine='python',cache=TRUE}
x = 10
```

```{r,engine='python',cache=TRUE}
print x
```

У кого-нибудь есть идея?


person Glen Thompson    schedule 11.05.2015    source источник


Ответы (1)


Параметр блока cache не сохраняет все переменные, определенные в блоке для языков, отличных от R. Тем не менее, это экономит распечатанные выходные данные, поэтому, если вы вычисляете что-то, что требует времени, какие-либо результаты не нужно будет повторно вычислять. С сайта knitr:

За исключением engine='R' (по умолчанию), все фрагменты выполняются в отдельных сеансах, поэтому переменные не могут использоваться напрямую. Если мы хотим использовать объекты, созданные в предыдущих фрагментах, нам обычно приходится записывать их в файлы (в качестве побочных эффектов). Для движка bash мы можем использовать Sys.setenv() для экспорта переменных из R в bash (пример).

Можно сохранить несколько значений в среде оболочки и извлечь эти значения из других ячеек, прочитав среду. Именно такой подход использовал Yihui в примере с Polyglot. Итак, для Python, если вы можете отформатировать значение в виде строки и передать его в sys.setenv(), вы можете использовать это значение в другой ячейке (запустить как отдельный сеанс Python), вызвав sys.getenv().

Хотя меня немного смущает подход к двигателям C и Fortran. Кажется, у них есть доступ к скомпилированным функциям в более поздних фрагментах с помощью использования некоторая функция с именем .C() или функция с именем .Fortran() . Но похоже, что Python не имеет эквивалента.

person pneumatics    schedule 21.01.2016