Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
网状-在Rmarkdown中运行python块_Python_R_R Markdown_Knitr_Reticulate - Fatal编程技术网

网状-在Rmarkdown中运行python块

网状-在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

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

```{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,但情况似乎并非如此

问题:

  • 有没有一种方法可以从R访问在以前运行的Python块(不是knit)中创建的变量?如何将python块中创建的变量“导出”到R
  • 要理解在Rmarkdown文件的python块中单击run按钮时会发生什么,什么是一个好的参考
  • 编辑:好的,在看到这里的第一个答案后,我确实将knitr和rmarkdown更新为最新版本,但仍然存在相同的问题。 我将
    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?