网状-在Rmarkdown中运行python块
也许我遗漏了什么,但是如果下面的代码是我的Rmd文件的内容网状-在Rmarkdown中运行python块,python,r,r-markdown,knitr,reticulate,Python,R,R Markdown,Knitr,Reticulate,也许我遗漏了什么,但是如果下面的代码是我的Rmd文件的内容 ```{r} library(reticulate) use_virtualenv("r-reticulate") py_available(TRUE) ``` ```{python} a = 7 print(a) ``` ```{r} py$a ``` 当我编织文件时,最后一块的输出是7(如预期的那样)。另一方面,单击Rstudio中的runall按钮(或逐个运行块),最后一个块的结果为NULL 与之相比,在python块中为fli
```{r}
library(reticulate)
use_virtualenv("r-reticulate")
py_available(TRUE)
```
```{python}
a = 7
print(a)
```
```{r}
py$a
```
当我编织文件时,最后一块的输出是7(如预期的那样)。另一方面,单击Rstudio中的runall按钮(或逐个运行块),最后一个块的结果为NULL
与之相比,在python块中为flights
分配一些东西应该使py$flights
可用于R,但情况似乎并非如此
问题:
py\u 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
您必须使用Rstudio每日构建()并将
knitr
,rmarkdown
升级至最新版本
> packageVersion("rmarkdown")
[1] ‘1.9’
> packageVersion("knitr")
[1] ‘1.20’
r标记/knitr: 运行块: 目前不支持在不编织文档的情况下运行块。请看这里:或 编辑:Freguglia的解决方案: “解决方法是将python块转换为R块,只需将整个内容包装在py_run_string()函数中,这样就可以通过py$variable_name从R访问在该代码段中指定的任何内容。” 编写该文件: 一种方法是按照上面的建议升级knitr,但您不必这样做,也不需要RStudio每日构建 如果您有knitr 1.18之前的版本,您可以包括:
`{r设置,include=FALSE}
knitr::knit_引擎$set(python=networkite::eng_python)
```
,请参见此处:
Python:
如果无法工作,请确保python连接在rmarmdown/knitr之外运行:
py_run_字符串(“x=10”);py$x
如果这也不起作用,您应该检查:
py\u available()
和py\u numpy\u available()
如果返回FALSE
:尝试使用:py\u available(TRUE)
初始化它
如果仍然没有,请检查您的配置:
py\u config()
它将为您提供有关该问题的进一步提示:
我的例子是:R和python的不同位版本(32对64),或者我在分别安装Python2.7和Anaconda时遇到了麻烦 这在当前的RStudio桌面上是固定的,例如
1.2.1114
。但是,如果您像我一样使用RStudio Server Pro 1.1.456,那么比使用py_run_string
更好的解决方法可能是使用networkite::repl_python()
,它在R控制台中提供了一个python控制台,并允许您通过复制粘贴到控制台中来运行python块
解决方法:
工作:
作者可能会用到你链接的文档,说Networkite在RStudio每日版本中,但不确定它是否真的在RStudio的发布版本中。RStudio已经包含了一种运行Python块的方法,只需使用默认的
Python
解释器,但没有与R的交叉通信,这可能就是您所看到的。知道它对您有用吗?仍然不起作用,只是用信息编辑帖子。py_run_string(“x=10”);py$x
工作正常。似乎py\u run\u string()
能够在R环境中修改py
,而仅仅运行python无法修改任何内容。需要明确的是:添加knitr::knit\u engines$集(…)
代码段,编织文档仍然不起作用?(到目前为止,不支持在不编织的情况下运行块…)编织文档非常有效。我认为有一种方法可以单独执行块并将变量“导出”到R环境中。就你所说的而言,这是不可能的,这里也发现了同样的情况。我接受了这个答案,但我还想补充一点,解决方法是将python块转换为R块,然后将整个内容包装在py\u run\u string()函数中,因此,无论您在这段代码中分配什么,都可以通过py$variable\u name
从R访问。很好,我添加了它并引用了您的话。。。您还可以在这里添加解决方法:我尝试在每日构建中运行与问题相同的代码。虽然某些东西确实发生了变化,但现在运行python块会抛出一个错误。我刚刚澄清,它是在桌面(windows)中修复的。您使用的是哪种RStudio?