Language engines
是一个很好的knitr
特性。我们可以在knitr中使用任何语言,包括但不限于R.,但如果我想使用一个chunck中定义的结果/变量,在另一个chunck中使用相同语言或另一种语言(更性感的选项)怎么办?
最好用一些代码来解释我的想法。这里我定义了4个块,2个在python中,2个在R中。在
首先,我在python中定义了一个变量x
:
## 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 chunck中使用x:
^{pr2}$但这里看起来没有错误。如果我想在新的R chunck中使用x:
```{r fig.width=7, fig.height=6}
x +1
y = 2
```
## Error: object 'x' not found
我得到一个错误。现在如果我尝试在新的R块中使用y,它会很好地工作。r引擎可以使用在前面的r chunck中定义的变量。注意,这不适用于python。在
```{r fig.width=7, fig.height=6}
y+3
```
## [1] 5
为什么R和python在行为上有区别呢?它是由于R范围界定规则造成的,还是仅仅是一个尚未在knitr中实现的未来?或者是虫子?在
您可以在python的启动(
PYTHONSTARTUP
)文件中放入一些内容。当退出利用atexit
时,一个精心设计的启动文件可以导出文件中的所有已知变量。在下面是一个打印所有新全局变量的配方:
下面是运行上述代码后的示例会话。在
^{pr2}$您可以改用file/socket/message queue/etc
这是记录在案的行为。在
见http://yihui.name/knitr/demo/engines/
相关问题 更多 >
编程相关推荐