Rmarkdown中的网状运行python块

2024-05-13 14:26:18 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

当我编织文件时,最后一个块的输出是7(如预期)。另一方面,单击Rstudio中的run all按钮(或逐个运行块),最后一个块的结果是NULL

R notebook example相比,给python块中的flights分配一些内容似乎可以使py$flights对R可用,但事实并非如此。

问题:

  1. 有没有一种方法可以从R访问以前运行的Python块(不是knit)中创建的变量?如何将python块中创建的变量“导出”到R?
  2. 当我在Rmarkdown文件的python块中单击run按钮时,什么是一个很好的参考?

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

> 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之间的这种“共享”环境不是包应该如何工作的?另外,还有一些额外的信息

> 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

Tags: 文件runpynumpyconfigtrue内容bin
3条回答

必须使用Rstudio每日生成(source),并将knitrrmarkdown升级到最新版本。

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

这在当前的RStudio桌面中是固定的,例如1.2.1114。但是,如果您像我一样被rstudioserverpro1.1.456困住了,一个比使用py_run_string更好的解决方法可能是使用reticulate::repl_python(),它在R控制台中为您提供一个Python控制台,并允许您通过复制粘贴到控制台中来运行Python块。

解决方法: workaround 工作: working

r标记/刀号:

运行块:

到目前为止,不支持在不编织文档的情况下运行块。请看这里: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时遇到了麻烦。

相关问题 更多 >