results = 'asis'Rmarkdown中的块选项允许用户轻松动态创建包括标题的文本.但是,我希望动态创建带有该asis选项的标头,但随后在相同的代码块中插入一些图形.
我能找到的最相关的答案是:以编程方式插入带有R markdown的文本,标题和列表,但这个问题的答案不允许这些动态标题中的动态标题和图表.
这是一个简单的可重复的例子,展示了我能够和不能实现的目标 results = 'asis'
下面的代码完成了我的预期,为每个Species创建一个标头.
---
output: html_document
---
```{r echo = FALSE, results ='asis'}
for(Species in levels(iris$Species)){
cat('#', Species, '\n')
}
```
Run Code Online (Sandbox Code Playgroud)
这里的代码直接放在我想要的地方.理想情况下,下面的代码会为每个Species生成一个标题,每个标题下面都有一个图.相反,它会setosa在输出文件中生成单个标头,然后是三个图.
---
output: html_document
---
```{r echo = FALSE, results ='asis'}
library(ggplot2)
for(Species in levels(iris$Species)){
cat('#', Species, '\n')
p <- ggplot(iris[iris$Species == Species,], aes(x = Sepal.Length, y = Sepal.Width)) +
geom_point()
print(p)
}
```
Run Code Online (Sandbox Code Playgroud)
有没有办法在每个标题下动态生成3个标题?
'asis' 块对于在 Markdown 文档中输出对象列表非常有用,请参阅以下示例:Highcharter、DT、Leaflet,...
但是,在上面的示例中,如果渲染器在前一个块中没有被调用一次,则对象列表将不会打印,以便它被初始化:这是一个棘手的解决方法,我通过试验找到了更多解决方案/错误比通过在文档中查找它更容易。
这是一个可重现的问题,也发布在https://github.com/rstudio/rmarkdown/issues/1877上:
---
title: "Test"
output:
html_document
---
```{r,echo=F}
library(DT)
library(rmarkdown)
library(purrr)
library(knitr)
df_list <- list("cars" = mtcars, "flowers" = iris)
knitr::opts_chunk$set(echo = FALSE, warning = FALSE, message = FALSE)
```
```{r}
# If this first initialization isn't run, tabs won't print
DT::datatable(data.frame())
```
# Test tabs {.tabset}
```{r, results='asis' }
imap(df_list, ~{
cat('## Subtab ',.y,'\n')
cat('\n')
DT::datatable(.x) %>%
htmltools::tagList() %>% as.character() %>% cat() })
```
Run Code Online (Sandbox Code Playgroud)