首页 > 解决方案 > RMD:如何通过带有图和表的循环创建选项卡式块

问题描述

我有许多类似的数据集,我想在 RMD 文件中输出并将每个输出存储在特定选项卡中。

我创建了两个函数来生成一个表(使用 Kable)和一个 ggplot 的 plotly。为了避免重复将它们全部写出来(这将花费我很长时间),我尝试使用 cat() 函数编写一个循环来为我生成块并在正确的选项卡中输出表格和图表。

然而,虽然我制作的循环正确地生成了标题和选项卡,但它根本不输出图形或表格。事实上,它只是偶尔在第一个选项卡中输出一个图,即使这样也经常会弄乱整个块顺序。

请参见下面的示例:

```{r,fig.width=6,echo=FALSE,results =“asis”}

types <- c(“mpg”,”cyl”,”hp”)
Headers <- c(“header 1”,”header 2”)

for (i in headers) {
 cat(paste0(“# “,i,”{.tabset} \n”))
  for (j in types) {
   cat(paste0(“# “,j,” \n”))

#this is where the problems begin   
   cat(“```{r} \n”)
   plot(mtcars[j])
   cat("  \n")

 }
}

此外,就目前而言,基本 R 绘图和我制作的 ggplot/kable 函数似乎都不起作用。

我在这方面遇到了很多麻烦,并且迫切需要时间来提交这份报告,所以任何帮助都将不胜感激!如果有更好的方法来做到这一点,请告诉我!

谢谢您的帮助!

标签: rr-markdown

解决方案


通过以下调整,您的最小工作示例可提供所需的输出:

```{r, fig.width=6, echo=FALSE, results ="asis"}

types <- c("mpg","cyl","hp")
headers <- c("header 1","header 2")

for (i in headers) {
  
 cat(paste0("## ",i,"{.tabset} \n"))

  for (j in types) {
   cat(paste0("### ",j," \n"))
    plot(mtcars[j])
    cat("\n\n")

 }
}
```

请注意,选项卡必须比关联的选项卡集低一级(例如“级别”##上的选项卡,级别上的选项卡###)。此外,图形/表格必须在代码块中生成,而不是使用cat()(至少在我的应用程序中是这种情况)传送到控制台。


推荐阅读