循环中的Rmarkdown,"编织html"按钮与rmarkdown::Render的输出不同

2022-02-25 00:00:00 r rstudio r-markdown html knitr

编辑

此问题不一定只与{htmlTable}有关。呈现已使用{kableExtra}包(see also this thread)设置样式的html表格时也会发生同样的情况。

原始问题

我正在RMarkdown中工作,试图用htmlTable包中的htmltables在循环中呈现文档。当我在RStudio中按下"编织"按钮时,一切都很正常。但是当我使用render()函数时,不会打印循环中的htmltables,但会打印循环之前的表。 我阅读了该&q;针织&按钮,渲染函数也执行同样的操作,因此我不明白有什么问题?

这是一个包含hmtlTables

.Rmd文件的工作示例
---
output: html_document
---

## htmlTables


```{r, results='asis'}
library(data.table)
library(htmlTable)
library(ggplot2)
a <- data.table(matrix(seq(1, 100, 5), ncol = 2))
htmlTable(a)
for (i in 10:11) {
    cat( paste('## title no.', i, '
' ) ) 
    print(ggplot(a*i, aes(x = V1, y = V2)) + geom_point())
    print(htmlTable(a*i))
    cat('
')
}
```

我需要使用不同的参数自动生成许多报告,因此我需要将其与render()一起使用。


解决方案

htmlTable定义了一个print方法,该方法似乎要在新窗口中打印表,将print()更改为writeLines()就可以了:

---
output: html_document
---

## htmlTables


```{r, results='asis'}
library(data.table)
library(htmlTable)
library(ggplot2)
a <- data.table(matrix(seq(1, 100, 5), ncol = 2))
htmlTable(a)
for (i in 10:11) {
    cat( paste('## title no.', i, '
' ) ) 
    print(ggplot(a*i, aes(x = V1, y = V2)) + geom_point())
    writeLines(htmlTable(a*i))
    cat('
')
}
```

不过,我还是觉得有点奇怪,因为我相信编织按钮在引擎盖下面使用了rmarkdown::Render(),但在本例中它们有不同的行为。

相关文章