微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

除非在 RStudio 中运行,否则 Reticulate 编织时无法访问 Python 中的 R 变量

如何解决除非在 RStudio 中运行,否则 Reticulate 编织时无法访问 Python 中的 R 变量

我有一个包含以下内容的 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(callable,dots$args,dots$keywords) 中的错误
运行时错误:评估错误:未找到对象“b”。

详细回溯:文件“”,第 1 行,在文件中 "/Library/Frameworks/R.framework/Versions/3.6/Resources/library/reticulate/python/rpytools/call.py",第 21 行,在 python_function 中 引发 RuntimeError(res[kErrorKey])

从 R 访问 Python 变量似乎工作正常,但我无法在 Python 中访问 R 变量。

我使用的是 Reticulate 1.18、Knitr 1.30 和 rMarkdown 2.6。从 RStudio 和 R 控制台调用 py_config() 返回相同的结果:

>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 蟒蛇之家:
/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(认,2020 年 11 月 20 日,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 强制的

解决方法

看起来这在当前版本的 Reticulate 中被破坏了。我降级到 1.16 并修复了它,1.17 及更高版本已损坏。我已向开发人员提交了一张票:https://github.com/rstudio/reticulate/issues/914

编辑:现在在最新的开发版本中修复了这个问题,可以用 remotes::install_github("rstudio/reticulate") 安装

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。