Language engines
是一个很棒的knitr
功能。我们可以在 knitr 中使用任何语言,包括但不限于 R。但是如果我想使用在一个块中定义的结果/变量,在另一个块中使用相同的语言或另一种语言(更性感的选项)怎么办?
最好用一些代码来解释我的想法。这里我定义了 4 个块,2 个在python中,2 个在R中。
x
首先我在python中定义一个变量:
## I define engien path explicitly here (TODO: set it globally)
```{r,engine='python',engine.path='C:/Anaconda/python.exe' }
x = 1
print x
```
## 1
现在尝试在新的 python 块中使用 x:
```{r,engine='python',engine.path='C:/Anaconda/python.exe' }
x = x +1
print x
```
没有错误,但结果惊人,看起来 x 在这里是 NULL。现在,如果我尝试在新的 R 块中使用 x:
```{r fig.width=7, fig.height=6}
x +1
y = 2
```
## Error: object 'x' not found
我得到一个错误。现在,如果我尝试在新的 R 块中使用 y 并且它工作正常。r 引擎可以使用前面 R 块中定义的变量。请注意,这不适用于 python。
```{r fig.width=7, fig.height=6}
y+3
```
## [1] 5
为什么这里 R 和 python 之间的行为存在差异?它是由于 R 范围规则而导致的结构性,还是只是尚未在 knitr 中实现的未来?或者可能是一个错误?