Reticulate-запуск кусков python в Rmarkdown
может быть, я что-то пропустил, но если следующий код является содержанием моего файла Rmd
```{r}
library(reticulate)
use_virtualenv("r-reticulate")
py_available(TRUE)
```
```{python}
a = 7
print(a)
```
```{r}
py$a
```
когда я связываю Файл, Выход для последнего куска равен 7 (как и ожидалось). С другой стороны, нажав кнопку запустить все в Rstudio (или запуск кусков один за другим), результаты на NULL
для последнего куска.
по сравнению с R пример ноутбука это похоже на назначение чего-то flights
в python кусок должен сделать py$flights
доступные для R, но это не похоже на случай.
вопросы:
- есть ли способ получить доступ из R к переменной, созданной в ранее запущенном куске Python (не вязать)? Как "экспортировать" в R переменную, созданную в куске python?
- что такое хорошая ссылка, чтобы понять, что происходит, когда я нажимаю кнопку запуска в куске python файла Rmarkdown?
редактировать: хорошо, после просмотра первых ответов здесь я обновил knitr и rmarkdown до последней версии, но все равно имел ту же проблему.
Я добавил py_available(TRUE)
в мой файл, чтобы убедиться, что он был инициализирован, все еще, последний кусок приводит к 7
при вязании, но запуск кусков один за другим приводит к
> py$a
Error in py_get_attr_impl(x, name, silent) :
AttributeError: 'module' object has no attribute 'a'
проблема в следующем: присвоение значения a
в python chunk ничего не делает с py$a
в среде R. Возможно, эта" общая " среда между R и python-это не то, как пакет должен работа? Кроме того, для дополнительной информации
> py_config()
python: /usr/bin/python
libpython: /usr/lib/python2.7/config-x86_64-linux-gnu/libpython2.7.so
pythonhome: /usr:/usr
version: 2.7.14 (default, Sep 23 2017, 22:06:14) [GCC 7.2.0]
numpy: /usr/lib/python2.7/dist-packages/numpy
numpy_version: 1.12.1
python versions found:
/usr/bin/python
/usr/bin/python3
2 ответов
Rmarkdown / knitr:
запуск блоков:
запуск кусков без вязания документа пока не поддерживается. Смотрите здесь: https://github.com/yihui/knitr/issues/1440 или Reticulate не совместное состояние между ячейками R/Python или ячейками Python / Python в RMarkdown.
Edit: обходной путь по Freguglia:
"решение превратить куски питона в R куски и просто оберните все содержимое в функцию py_run_string (), поэтому все, что вы назначаете в этом фрагменте кода, доступно из R по py$variable_name."
вязание документа:
один из способов-обновить knitr
Как было предложено выше, но вам не нужно, и Вам также не нужна ежедневная сборка RStudio.
если у вас есть версия knitr до 1.18, можно отнести:
```{r setup, include = FALSE}
knitr::knit_engines$set(python = reticulate::eng_python)
```
см. здесь: https://rstudio.github.io/reticulate/articles/r_markdown.html#engine-setup.
Python:
если он не работает, убедитесь, что соединение python работает за пределами rmarmdown / knitr:
py_run_string("x = 10"); py$x
.
в случае, если также не работает, вы должны проверить:
py_available()
и py_numpy_available()
.
если он возвращает FALSE
: попробуйте инициализировать его с помощью:py_available(TRUE)
.
если это все равно не проверить конфиг:
py_config()
это даст вам дополнительные подсказки по проблеме:
примеры для меня были: разные битовые версии R и python (32 vs 64) или как-то я столкнулся с проблемами, установив оба Python2.7 и отдельно Анаконда.
вы должны использовать ежедневную сборку Rstudio (источник) и обновление knitr
, rmarkdown
до последней версии.
> packageVersion("rmarkdown")
[1] ‘1.9’
> packageVersion("knitr")
[1] ‘1.20’