【问题标题】:Is it possible to share variables between knitr chunks using engine="bash"?是否可以使用 engine="bash" 在 knitr 块之间共享变量?
【发布时间】:2012-11-10 23:49:22
【问题描述】:

类似这样的东西,但它不起作用:

```{r examples, engine="bash"}
    export EXAMPLES="example/path"
```

```{r example1, engine="bash"}
    echo $EXAMPLES
```

但是,这可行:

```{r examples2, engine="bash"}
    export EXAMPLES="example/path"
    echo $EXAMPLES
```

【问题讨论】:

标签: knitr


【解决方案1】:

这是一个很好的问题!这也是我真正想要完成但不知道该怎么做的事情(如果有人可以帮助我,我很感激)。它不仅对bash 有用,而且对knitr 中的所有其他引擎也有用,例如pythonruby 等。暂时不起作用的原因是knitr只是通过system('engine -arg code')运行代码,即对于每个代码块,都会打开一个新的引擎会话,因此所有块本质上都是在不同的进程中执行的。

理想情况下,我想要一个能够打开会话并继续收听新代码的引擎,但我不确定这是否可能。 AFAIK,共享变量的唯一方法是将它们写入文件,这显然很尴尬。

【讨论】:

  • @nachocab R 代码的处理方式非常不同:所有 R 代码块共享同一个 R 会话,因此变量可以跨块共享
  • 作为替代方案,是否可以使用 R 代码填充 bash 变量?这样我就可以使用我想要使用的所有变量设置一个初始 R 块,并从 engine="bash" 块中调用它们。
  • @nachocab 是的,Sys.setenv() 是你的朋友:github.com/yihui/knitr-examples/blob/master/… (source)
  • 是否可以这样做:source ~/.bashrc?
  • @nachocab 是的,你可以把它写在一个 bash 块中,但我认为当 bash 启动时,~/.bashrc 应该是自动获取的。
猜你喜欢
  • 2011-06-25
  • 2021-06-20
  • 1970-01-01
  • 2019-12-24
  • 2012-03-13
  • 2019-08-03
  • 1970-01-01
  • 2015-07-13
  • 2015-11-28
相关资源
最近更新 更多