网状 - 在Rmarkdown中运行python块

Fre*_*lia 9 python r knitr r-markdown reticulate

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

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

当我编织文件时,最后一个块的输出是7(正如预期的那样).另一方面,单击Rstudio中的"全部运行"按钮(或逐个运行块),将导致NULL最后一个块.

R笔记本示例相比,似乎flights在python块中分配内容应该py$flights可用于R,但事实并非如此.

问题:

  1. 有没有办法从R访问一个先前运行过的Python块中创建的变量(不是编织)?如何"导出"R在python块中创建的变量?
  2. 什么是一个很好的参考,以了解当我点击Rmarkdown文件的python块中的运行按钮时会发生什么?

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

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

问题是:a在Python py$a环境中为python块分配值没有做任何事情.也许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
Run Code Online (Sandbox Code Playgroud)

jan*_*glx 6

这在当前的 RStudio 桌面(例如)中已修复1.2.1114。但是,如果您像我一样坚持使用 RStudio Server Pro 1.1.456,那么比使用更好的解决方法py_run_string可能是使用reticulate::repl_python(),它在 R 控制台中为您提供了一个 Python 控制台,并允许您通过将 Python 块复制粘贴到控制台来运行它们。

解决方法: 解决方法 在职的: 在职的


Hei*_*erg 5

您必须使用 Rstudio 每日构建(源代码)并升级knitrrmarkdown最新版本。

\n\n
> packageVersion("rmarkdown")\n[1] \xe2\x80\x981.9\xe2\x80\x99\n> packageVersion("knitr")\n[1] \xe2\x80\x981.20\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n


Big*_*ist 5

Rmarkdown /针织衫:

运行块:

到目前为止,尚不支持运行块而不编织文档。参见此处:https : //github.com/yihui/knitr/issues/1440网状结构不共享RMarkdown中的R / Python单元或Python / Python单元之间的状态

编辑: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连接在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和单独的Anaconda时遇到麻烦。