[英]Reticulate - Running python chunks in Rmarkdown
Maybe I'm missing something, but if the following code is the content of my Rmd file 也许我错过了什么,但如果下面的代码是我的Rmd文件的内容
```{r}
library(reticulate)
use_virtualenv("r-reticulate")
py_available(TRUE)
```
```{python}
a = 7
print(a)
```
```{r}
py$a
```
when I Knit the file, the output for the last chunk is 7 (as expected). 当我编织文件时,最后一个块的输出是7(正如预期的那样)。 On the other hand, clicking the run all button in Rstudio (or running chunks one by one), results on
NULL
for the last chunk. 另一方面,单击Rstudio中的“全部运行”按钮(或逐个运行块),最后一个块的结果为
NULL
。
Comparing with the R notebook example it seems like assigning something to flights
in the python chunk should make py$flights
available for R, but that doesn't seem the case. 与R笔记本示例相比,似乎为python块中的
flights
分配了一些内容,应该为R提供py$flights
,但事实并非如此。
Questions: 问题:
EDIT : Ok so after seeing the first answers here, I did update both knitr and rmarkdown to the latest version, but still had the same problem. 编辑 :好的,所以看到这里的第一个答案后,我确实更新了knitr和rmarkdown到最新版本,但仍然有同样的问题。 I added
py_available(TRUE)
to my file to make sure it was initialized, still, last chunk results in 7
when knitted, but running chunks one-by-one results in 我将
py_available(TRUE)
添加到我的文件中以确保它已被初始化,但是,当针织时,最后一个块结果为7
,但是逐个运行块会导致
> py$a
Error in py_get_attr_impl(x, name, silent) :
AttributeError: 'module' object has no attribute 'a'
The problem is: Assigning a value to a
in the python chunk isn't doing anything to py$a
in the R environment. 问题是:将值分配给
a
在Python块是没有做任何事情来py$a
在R环境。 Maybe this "shared" environment between R and python isn't how the package is supposed to work? 也许R和python之间的这个“共享”环境不是这个包应该如何工作的? Also, for some extra information
另外,还有一些额外的信息
> 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: Rmarkdown / knitr:
Running the chunks: 运行块:
Running the chunks without knitting the document is not supported so far. 到目前为止,不支持在不编织文档的情况下运行块。 See here: https://github.com/yihui/knitr/issues/1440 or Reticulate not sharing state between R/Python cells or Python/Python cells in RMarkdown .
请参阅此处: https : //github.com/yihui/knitr/issues/1440或网格化不在RM / RM中的R / Python单元格或Python / Python单元格之间共享状态 。
Edit: Workaround by Freguglia: 编辑:Freguglia的解决方法:
"Workaround is to turn python chunks into R chunks and just wrap the whole content in the py_run_string() function, so whatever you assign in that piece of code is accessible from R by py$variable_name." “解决方法是将python块转换为R块并将整个内容包装在py_run_string()函数中,因此无论您在该段代码中分配的内容都可以通过py $ variable_name从R中访问。”
Knitting the document: 编织文件:
One way is to upgrade knitr
as suggested above, but you dont have to and you also dont need RStudio daily build. 一种方法是按照上面的建议升级
knitr
,但你没必要,而且你也不需要RStudio每日构建。
If you have a version of knitr prior to 1.18, you can include: 如果你有1.18之前的knitr版本,你可以包括:
```{r setup, include = FALSE} knitr::knit_engines$set(python = reticulate::eng_python) ```
, see here: https://rstudio.github.io/reticulate/articles/r_markdown.html#engine-setup . ```{r setup, include = FALSE} knitr::knit_engines$set(python = reticulate::eng_python) ```
,见这里: https ```{r setup, include = FALSE} knitr::knit_engines$set(python = reticulate::eng_python) ```
引擎设置 。
Python: 蟒蛇:
If it doesnt work ensure the python connection is running outside of rmarmdown/knitr: py_run_string("x = 10"); py$x
如果它不起作用,请确保python连接在rmarmdown / knitr之外运行:
py_run_string("x = 10"); py$x
py_run_string("x = 10"); py$x
. py_run_string("x = 10"); py$x
。
In case that also doesnt work, you should check: py_available()
and py_numpy_available()
. 如果也不起作用,您应该检查:
py_available()
和py_numpy_available()
。
If it returns FALSE
: Try to initialize it with: py_available(TRUE)
. 如果返回
FALSE
:尝试使用以下py_available(TRUE)
初始化它: py_available(TRUE)
。
If that´s still a no - check your config: py_config()
如果仍然是 - 请检查您的配置:
py_config()
It will give you further hints on the problem: 它将为您提供有关该问题的进一步提示:
Examples for me were: different bit versions of R and python (32 vs 64) or somehow i ran into trouble having installed both Python2.7 and seperately Anaconda. 我的例子是:R和python的不同位版本(32对64)或者不知何故我遇到了安装Python2.7和单独的Anaconda的麻烦。
This is fixed in current RStudio Desktop eg 1.2.1114
. 这在当前的RStudio Desktop中已修复,例如
1.2.1114
。 But if you are like me stuck with RStudio Server Pro 1.1.456 a better workaround than using py_run_string
might be to use reticulate::repl_python()
which gives you a Python console within the R console and allows you to run your python chunks by copy pasting them into the console. 但是,如果你像我一样坚持使用RStudio Server Pro 1.1.456比使用
py_run_string
更好的解决方法可能是使用reticulate::repl_python()
,它在R控制台中提供了一个Python控制台,并允许你通过复制运行你的python块将它们粘贴到控制台中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.