为啥我不需要 results = "asis" 在 Rmarkdown 中逐字嵌入块输出?
Posted
技术标签:
【中文标题】为啥我不需要 results = "asis" 在 Rmarkdown 中逐字嵌入块输出?【英文标题】:Why do I not need results = "asis" to embed chunk output verbatim in Rmarkdown?为什么我不需要 results = "asis" 在 Rmarkdown 中逐字嵌入块输出? 【发布时间】:2021-12-20 14:05:24 【问题描述】:我曾经认为需要results = "asis"
块选项才能在渲染的 Rmarkdown 文档中逐字包含任何块输出;否则输出将被格式化为控制台输出(例如带有前导 ##
)。
但是,即使没有 results = "asis"
选项,knitr::kable()
等几个函数似乎也能正常工作,而我手动创建的表在下面的示例中被格式化为控制台输出。
knitr
是如何知道输出是逐字降价并且应该这样嵌入的?
我的例子:
---
title: Title
output: github_document
---
```r
# works without results = "asis"
knitr::kable(mtcars)
```
```r
# without results = "asis": formatted as console output
table <- "|col1|col2|\n|-|-|\n|a|b|"
writeLines(table)
```
```r, results='asis'
# works only with results = "asis"
writeLines(table)
```
【问题讨论】:
【参考方案1】:results = 'asis'
告诉knitr
不要将代码块输出包装在代码块中。
在您的示例 2 中,输出被格式化为代码块(因为没有 results = 'asis'
):
## |col1|col2|
## |-|-|
## |a|b|
示例 3 按“原样”处理输出,这是格式化表格的有效降价。
R Markdown Cookbook 中给出了一些附加示例。
【讨论】:
但是为什么即使没有results = "asis"
,它也能在第一个示例中工作?示例 2 和 3 代表了我认为这个块选项的工作原理。
那是因为pandoc
正确识别通过kable
生成的管道表(这是默认的kable
输出格式)。请注意,这仅在 kable
是代码块中的***表达式时才有效。 Stack Overflow 和 GH 上有很多围绕这个“特性”的帖子,这通常导致需要在表达式中包含 result = 'asis'
,包括嵌套的 kable
调用或循环:参见例如here, here.
然后我很想看看knitr
输出什么(即在pandoc 将markdown 风格转换为GitHub 之前)......显然在导出为@987654339 时没有keep_md
选项@.以上是关于为啥我不需要 results = "asis" 在 Rmarkdown 中逐字嵌入块输出?的主要内容,如果未能解决你的问题,请参考以下文章
请问,as.Date(),as.POSIXct()函数都识别不了月份的英文,是为啥呀?