【问题标题】:How to generate rmarkdown chunk within a chunk如何在一个块内生成 rmarkdown 块
【发布时间】:2018-10-16 19:00:42
【问题描述】:

我正在尝试使用代码生成 rmarkdown 块。我读过类似的问题及其解决方案,例如使用pander 或使用cat。我似乎无法生成它。我还尝试手动编织输出。这是Rmd 文件的示例:

---
title: "test"
output: pdf_document
---


## R Markdown

```{r, results='asis',echo=FALSE}
txt <- paste("```{r}",
      "2+2",
      "```")
pander::pander(txt)
```

当我knit 这个时,我得到一个逐字的{r} 2+2。我想看到第四个。在我的真实示例中,我使用bookdown 并尝试生成block2 块。

任何想法如何生成这个被评估为R 代码的块?

【问题讨论】:

  • 我不明白。你为什么不直接评估 2 + 2 在一个块中,或者内联? block2 是什么?
  • 因为重点不是评估 2+2。关键是以后能够评估整个块。 bookdown 中的 block2 可让您创建自己的环境。我有一个带有计算统计数据和一些文本格式的调用框。当我把所有这些都放在 block2 块中时,knitr 会逐字逐句吐出。

标签: r r-markdown knitr bookdown


【解决方案1】:

这是你想要的吗?

## R Markdown
```{r, results='asis',echo=FALSE}
txt <- paste("```{r}",
      2+2,
      "```")
pander::pander(txt)
```

这评估为

```{r} 4 ```

在您的降价文档中。 您使用的是字符串文字 "2+2",而不是表达式 2+2。我猜这是第一个问题。

如果您希望正确解析它,您需要向paste 添加一个sep = "\n" 参数手动添加换行符。 IE。

## R Markdown
```{r, results='asis',echo=FALSE}
txt <- paste("```{r}\n",
      2+2,
      "\n```", sep = "")
pander::pander(txt)
```

这评估为

```{r} 
4
```

在markdown文档中被解释为R代码。

【讨论】:

  • 我希望看到纯数字 4 作为块的输出,而不是 r 标记。那个 2+2 可以是一个函数或任何我想稍后评估的东西。
  • 我已经编辑了帖子:)。您还需要换行符才能在自己的行上添加反引号。
  • 啊。这样可行。在这种情况下,你甚至不需要 pander,你可以简单地 cat。我将在我的复杂示例中尝试这个。
  • 不,你说得对,在这个玩具示例中不需要它。我只是认为这可能是您的真实情况。
  • 所以,我在 boodown 中尝试了这个,它可以部分工作。因此,如果生成的标记中的引擎是 r、python 甚至是 block2,则该块得到正确评估并且输出是正确的。但是当我向 block2 引擎添加一个类型时,它会逐字打印引擎。以下是 bookdown 中块的链接:bookdown.org/yihui/bookdown/custom-blocks.html
猜你喜欢
  • 2017-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
相关资源
最近更新 更多