5

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
```

有人有想法吗?

4

1 回答 1

5

chunk 选项cache不会保存块中为除R. 但是,它会保存打印输出,因此如果您计算需要一段时间的东西,则不需要重新计算任何结果。从knitr网站:

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

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

不过,我对使用CFortran引擎所采用的方法有点困惑。那些似乎可以通过使用调用.C()的函数或调用.Fortran()的函数来访问稍后块中的已编译函数。但似乎 Python 没有等价物。

于 2016-01-21T22:27:44.433 回答