knitr - Python引擎缓存选项不起作用

时间:2015-05-11 19:21:00

标签: python r knitr reproducible-research

yihui给出了为不同引擎使用缓存选项的示例

https://github.com/yihui/knitr-examples/blob/master/023-engine-python.Rmd

我似乎无法让它为python工作。

以下作品

```{r,engine='python',cache=TRUE}
x=10
print x
```

但这不起作用

```{r,engine='python',cache=TRUE}
x = 10
```

```{r,engine='python',cache=TRUE}
print x
```

有人有想法吗?

1 个答案:

答案 0 :(得分:4)

块选项cache不会保存块中为R以外的语言定义的所有变量。但是,它保存了打印输出,因此如果计算需要一段时间的内容,则不需要重新计算任何结果。来自knitr网站:

  

engine='R'(默认)外,所有块都是单独执行的   会话,因此无法直接共享变量。如果我们想   利用在以前的块中创建的对象,我们通常必须这样做   将它们写入文件(作为副作用)。对于bash引擎,我们可以使用   Sys.setenv()将变量从R导出到bash(示例)。

可以在shell的环境中保存一些值,并通过读取环境从其他单元格中检索这些值。这是方法Yihui took in the Polyglot example。因此,对于Python,如果您可以将值格式化为字符串并将其传递给sys.setenv(),则可以通过调用sys.getenv()在另一个单元格中运行该值(作为单独的Python会话运行)。

尽管如此,我对使用CFortran引擎采取的方法感到有些困惑。那些似乎可以通过using some function called .C()function called .Fortran()访问后续块中的已编译函数。但似乎Python没有等价物。