【问题标题】:Can you make inline chunks in knitr evaluate last?你能在最后评估 knitr 中的内联块吗?
【发布时间】:2016-04-08 19:04:59
【问题描述】:

我正在使用 knitr 编写手稿。 我正在使用内联块来确保文本与我的实际数据匹配。 例如“我对 \rinline{nrow(df)} 数据点进行了回归。”

但是,本文的摘要和其他早期部分需要此信息,而 df 是由解释其创建方式的方法部分旁边的代码创建的。

我可以强制所有内联块最后评估吗?

这里要明确的是一个降价示例。

Abstract
---------
My study is really interesting.
I performed regression on `r nrow(df)` data points.

Methods 
--------

I used simulated data drawn from a normal distribution.

```{r data}

df <- data.frame(x = rnorm(10), y = rnorm(10))
```

摘要中的第二句应为“我对 10 个数据点进行了回归”。

【问题讨论】:

  • 相关(虽然是特例):stackoverflow.com/questions/24498362/…
  • @CL。谢谢你。绝对相关,不确定我是否可以将其有效地应用到我的案例中。
  • 我认为它不适用于您的情况。但是对“最后评估内联代码”感兴趣的未来读者可能会发现它很有帮助,这就是我发布链接的原因。

标签: r knitr


【解决方案1】:

在编写 MRE 时,我找到了答案。

如果您在 R 会话中编织文档,则变量将保存到全局命名空间。 再次编织文档将填充内联块。

我在第一次编织时没有遇到任何错误。 因此,您确实需要检查最终文档是否包含所有内联值。

【讨论】:

  • 这不是 knitr 应该如何工作的,你能举例说明你是如何得到这种行为的吗?
  • 使用问题中的示例,运行knit 一次会给出“我对数据点进行了回归”。 (两个空格)。第二次运行(在同一个 R 会话中)给出“我对 10 个数据点进行了回归。”
  • 我现在不太确定这是否像我想象的那样有效。我可能在没有内联位的情况下运行,然后添加内联块并重新运行。
  • 我认为这个解决方案没有问题。对我来说效果很好,这个概念是合理的。在第一次运行时,df 在内联块中使用时不存在。当评估 data 块时,会在全局环境中创建 df。再次调用knit 会生成所需的文档,因为现在内联块使用来自全局环境的df
猜你喜欢
  • 2013-03-14
  • 2018-05-28
  • 2012-10-13
  • 2014-10-16
  • 1970-01-01
  • 2018-05-27
  • 2018-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多