R markdown:从代码块访问变量(变量范围)

m.t*_*ire 47 r knitr r-markdown

在R markdown(knitr包)中,我可以访问在代码块中计算的文档正文中的变量吗?

Mai*_*ura 64

是.您可以简单地调用任何先前评估的内联变量.

例如,如果您之前data.frame在一个块中创建了一个df <- data.frame(x=1:10)

`r max(df$x)`
Run Code Online (Sandbox Code Playgroud)

应该生产

10
Run Code Online (Sandbox Code Playgroud)

  • 但请注意,如果您希望在纯文本中使用它,那么它将被排版为代码,这可能不是您想要的.`r I(max(df $ x))`应该也可以工作,而不是代码格式的排版. (13认同)

小智 8

您可以访问以前创建的变量

`r variable`
Run Code Online (Sandbox Code Playgroud)

但是,如果变量是数字并且您想添加到 pdf 文档中,则应该将变量转换为字符串,以便

`r toString(variable)`
Run Code Online (Sandbox Code Playgroud)


ink*_*rap 6

我想补充一点,对于 R 以外的其他语言,情况并非如此。我知道这个问题已经解决了,而且是关于 R 的,但也许其他人觉得这很有用:

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

来源

R 中的示例:

x = 4

print(x)

## [1] 4
Run Code Online (Sandbox Code Playgroud)

Python 示例 2a):

x=1
print(x)

## 1
Run Code Online (Sandbox Code Playgroud)

Python 示例 2b):

print(x)

## Traceback (most recent call last):
##   File "<string>", line 1, in <module>
## NameError: name 'x' is not defined
Run Code Online (Sandbox Code Playgroud)

仅供参考。

  • @大卫-考夫曼,同意。在文档中找到以下引用后,刚刚浏览了此页面:“当前唯一的例外是`r`、`python`和`julia`。只有这些引擎在整个文档的同一会话中执行代码。” 来源:https://bookdown.org/yihui/rmarkdown/language-engines.html (2认同)