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, но это не похоже на случай.

вопросы:

  1. есть ли способ получить доступ из R к переменной, созданной в ранее запущенном куске Python (не вязать)? Как "экспортировать" в R переменную, созданную в куске python?
  2. что такое хорошая ссылка, чтобы понять, что происходит, когда я нажимаю кнопку запуска в куске 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’