首页 文章

网状 - 在Rmarkdown中运行python块

提问于
浏览
6

也许我错过了一些东西,但如果下面的代码是我的Rmd文件的内容

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

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

与[R notebook example](https://rstudio.github.io/reticulate/articles/rstudio_ide.html)相比,似乎在python块中为 `flights` 指定了一些内容应该使 `py$flights` 可用于R,但事实并非如此 . 

问题:


- 有没有办法从R访问一个先前运行过的Python块中创建的变量(不是编织)?如何"export"到R在python块中创建的变量?

- 什么是一个很好的参考,以了解当我点击Rmarkdown文件的python块中的运行按钮时会发生什么?

 **EDIT** :好的,看到这里的第一个答案后,我确实更新了knitr和rmarkdown到最新版本,但仍然遇到了同样的问题 . 我将 `py_available(TRUE)` 添加到我的文件中以确保它已被初始化,但是,当编织时,最后一个块会导致 `7` ,但是逐个运行块会导致

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

问题是:在python块中为 a 赋值并没有对R环境中的 py$a 做任何事情 . 也许R和python之间的这个"shared"环境不是这个包应该如何工作的?另外,还有一些额外的信息

> 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 回答

  • 3

    Rmarkdown / knitr:

    运行块:

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

    编辑:Freguglia的解决方法:

    “解决方法是将python块转换为R块,并将整个内容包装在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的麻烦 .

  • 3

    您必须使用Rstudio每日构建(source)并将 knitrrmarkdown 升级到最新版本 .

    > packageVersion("rmarkdown")
    [1] ‘1.9’
    > packageVersion("knitr")
    [1] ‘1.20’
    

相关问题