首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同语言定义的针织品块之间的混合变量/结果?

不同语言定义的针织品块之间的混合变量/结果?
EN

Stack Overflow用户
提问于 2013-07-31 23:52:23
回答 2查看 1.6K关注 0票数 7

Language engines是一个很棒的knitr特性。我们可以在针织品中使用任何语言,包括但不限于R,但是如果我想使用在一种语言中定义的结果/变量,在另一种语言中使用另一种语言或者用另一种语言定义的结果/变量(更性感的选项)呢?

最好用代码来解释我的想法。这里我定义了4个块,2个在python中,2个在R中。

首先,我在python中定义了变量x

代码语言:javascript
复制
## I define engien path explicitly here (TODO: set it globally)
```{r,engine='python',engine.path='C:/Anaconda/python.exe' }

X=1

打印x

代码语言:javascript
复制
## 1

现在,尝试在新的python chunck中使用x:

代码语言:javascript
复制
```{r,engine='python',engine.path='C:/Anaconda/python.exe' }

X=x +1

打印x

代码语言:javascript
复制

没有错误,但惊人的结果,看起来x是空在这里。现在,如果我尝试在新的R chunck中使用x:

代码语言:javascript
复制
```{r fig.width=7, fig.height=6}

X +1

Y=2

代码语言:javascript
复制
## Error: object 'x' not found 

我犯了个错误。现在,如果我尝试在新的R块中使用y,它会很好。R引擎可以使用在前defined中定义的变量。注意,这不适用于python。

代码语言:javascript
复制
```{r fig.width=7, fig.height=6}

y+3

代码语言:javascript
复制
## [1] 5

为什么R和python在行为上有区别?这是由于R的范围界定规则的结构,还是仅仅是一个未来还没有实现的针织?或者是窃听器?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-01 00:20:14

这是记录在案的行为。

请参阅http://yihui.name/knitr/demo/engines/

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

票数 8
EN

Stack Overflow用户

发布于 2013-08-15 07:41:51

您可以将某些内容放入python的启动(PYTHONSTARTUP)文件中。当利用atexit退出时,精心编写的启动文件可以导出文件中的所有已知变量。

下面是一个打印所有新的全局的菜谱:

代码语言:javascript
复制
>>> import atexit
>>> def list_globals(known_globals=globals().keys()):
...     new_globals = set(globals().keys())
...     new_globals -= set(known_globals)
...     for key in new_globals:
...        print '%s=%s' % (key, globals()[key])
... 
>>> atexit.register(list_globals)
<function list_globals at 0x107140e60>
>>> del list_globals
>>> del atexit
>>> 

下面是运行上述代码后的一个示例会话。

代码语言:javascript
复制
>>> 
>>> def foo():
...    a  = 1
... 
>>> b = 2
>>> ^D
b=2
foo=<function foo at 0x107140d70>

您可以使用文件/套接字/消息队列/等等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17982967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档