首页 > 解决方案 > 文档中代码块的内联引用

问题描述

假设有如下代码块:

```{r mean diff} 
(5-mean(dnorm(40,5,2))/5 
```

我希望能够在降价文档中以内联形式引用此代码块及其标签,以便将引用替换为此块的输出。有没有办法做到这一点?

" the difference is `r mean diff` %."    ##something like this?

标签: rr-markdown

解决方案


我认为您的问题的答案是“是的,但这很棘手”。默认情况下knitr不保存在代码块中计算的最后一个值。在常规代码中,计算的最后一个值保存在 中.Last.value,但knitr不模拟这一点。

然而,一个简单的修改可以让你做一些非常相似的事情:

```{r} 
meandiff <- 5-mean(dnorm(40,5,2))/5
meandiff   # if you want the chunk to print its value 
```

然后在文本中,使用

" the difference is `r meandiff` %."

如果您真的想保存最后一个值,可以通过设置“渲染挂钩”来实现。例如,下面的代码保存最后一个值,然后调用旧的钩子:

```{r}
.Last.value <- NULL
old_hook <- knitr::opts_chunk$get("render")

knitr::opts_chunk$set(render = function(x, options, ...) {
  .Last.value <<- x
  if (!is.null(old_hook))
    old_hook(x, options, ...)
  else
   knitr::knit_print(x, options, ...)
})
```

```{r mean diff} 
5-mean(dnorm(40,5,2))/5 
```

The value was `r .Last.value`.

推荐阅读