gpt4 book ai didi

python - Reticulate - 在 Rmarkdown 中运行 python block

转载 作者:太空狗 更新时间:2023-10-29 20:57:39 24 4
gpt4 key购买 nike

也许我遗漏了什么,但是如果下面的代码是我的 Rmd 文件的内容

```{r}
library(reticulate)
use_virtualenv("r-reticulate")
py_available(TRUE)
```
```{python}
a = 7
print(a)
```
```{r}
py$a
```

当我编织文件时,最后一个 block 的输出是 7(如预期的那样)。另一方面,单击 Rstudio 中的全部运行按钮(或一个接一个地运行 block ),最后一个 block 的结果为 NULL

R notebook example 相比似乎在 python block 中为 flights 分配一些东西应该使 py$flights 可用于 R,但事实并非如此。

问题:

  1. 有没有办法从 R 访问在之前运行的 Python block 中创建的变量(不是 knit)?如何将在 python block 中创建的变量“导出”到 R?
  2. 要了解当我在 Rmarkdown 文件的 python block 中单击运行按钮时会发生什么,有什么好的引用资料?

编辑:好的,所以在看到这里的第一个答案后,我确实将 knitr 和 rmarkdown 都更新到了最新版本,但仍然遇到同样的问题。我将 py_available(TRUE) 添加到我的文件以确保它已初始化,仍然,最后一个 block 在编织时产生 7 ,但是一个接一个地运行 block 导致

> py$a
Error in py_get_attr_impl(x, name, silent) :
AttributeError: 'module' object has no attribute 'a'

问题是:在 python block 中为 a 赋值不会对 R 环境中的 py$a 做任何事情。也许 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

最佳答案

Rmarkdown/knitr:

运行 block :

目前不支持在不编织文档的情况下运行 block 。看这里:https://github.com/yihui/knitr/issues/1440Reticulate not sharing state between R/Python cells or Python/Python cells in RMarkdown .

编辑:Freguglia 的解决方法:

“解决方法是将 python block 转换为 R block ,并将整个内容包装在 py_run_string() 函数中,因此无论您在该段代码中分配什么,都可以通过 py$variable_name 从 R 访问。”

编织文档:

一种方法是按照上面的建议升级 knitr,但您不必这样做,也不需要 RStudio 每日构建。

如果你有 1.18 之前的 knitr 版本,你可以包括:

```{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 对 64)或者我在安装 Python2.7 和单独的 Anaconda 时遇到了麻烦。

关于python - Reticulate - 在 Rmarkdown 中运行 python block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49503195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com