#r #r-markdown #reticulate
#r #r-markdown #reticulate
Вопрос:
У меня есть документ RMarkdown со следующим содержимым:
```{r setup, include=FALSE}
library(reticulate)
```
```{r}
#These lines don't seem to make a difference, but I have seen them suggested elsewhere
reticulate::use_python('/usr/local/Cellar/python@3.8/3.8.6_2/bin/python3.8')
knitr::knit_engines$set(python = reticulate::eng_python)
```
```{r}
py <- reticulate::py
```
```{python}
import sys
sys.version
a = 1
```
```{r python from r}
print(py$a)
b <- 2
```
```{python r from python}
print(r.b)
```
Если я запускаю это в RStudio, либо в интерактивном режиме, либо путем вязания всего документа, все работает, и последний фрагмент печатает «2». Однако при запуске из консоли R через render
(или мой рабочий скрипт, который выполняет регулярные тренировки модели) он завершается сбоем в последнем фрагменте со следующей ошибкой:
Ошибка в py_call_impl (вызываемый, точки $ аргументы, точки $ ключевые слова):
ошибка выполнения: ошибка оценки: объект ‘b’ не найден.Подробная трассировка: файл «», строка 1, в файле «/Library/Frameworks/R.framework/Versions/3.6/Resources/library/reticulate/python/rpytools/call.py «, строка 21, в python_function вызывает RuntimeError(res[kErrorKey])
Доступ к переменным Python из R, кажется, работает правильно, но я не могу получить доступ к переменным R в Python.
Я использую Reticulate 1.18, Knitr 1.30 и rMarkdown 2.6. Вызов py_config()
как из RStudio, так и из консоли R возвращает тот же результат:
>py_config()
python: /usr/local/Cellar/python@3.8/3.8.6_2/bin/python3.8 libpython:
/usr/local/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8/config-3.8-darwin/libpython3.8.dylib pythonhome:
/usr/local/Cellar/python@3.8/3.8.6_2/Frameworks/Python.framework/Versions/3.8:/usr/local/Cellar/python@3.8/3.8.6_2/Frameworks/Python.framework/Versions/3.8 версия: 3.8.6 (по умолчанию, ноябрь 20 2020, 18:29:40) [ Clang 12.0.0 (clang-1200.0.32.27)] numpy:
/usr/local/lib/python3.8/site-packages/numpy numpy_version: 1.18.5ПРИМЕЧАНИЕ: версия Python была принудительно установлена RETICULATE_PYTHON
Ответ №1:
Похоже, что это нарушено в текущей версии Reticulate. Я понизил рейтинг до 1.16, и это исправило его, 1.17 и более поздние версии сломаны. Я отправил заявку разработчикам: https://github.com/rstudio/reticulate/issues/914
Редактировать: теперь это исправлено в последней версии разработчика, которую можно установить с помощью remotes ::install_github («rstudio / reticulate»)
Ответ №2:
Это случилось со мной, потому что у меня была глупая идея назвать объект r
в скрипте RMarkdown
```{python}
import requests
r = requests.get('http://api.worldbank.org/v2/countries?incomeLevel=LMC')
r.content
```
будет работать в интерпретаторе python, но может возвращать ошибку в документе RMarkdown (потому reticulate
что ищет объект content
в среде python)
Лучшее решение: никогда не называть объект r
при использовании reticulate