【问题标题】:RMD: how to create tabbed chunks through loops with plots and tablesRMD:如何通过带有图和表的循环创建选项卡式块
【发布时间】:2021-12-06 08:24:20
【问题描述】:

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

我创建了两个函数来生成一个表格(使用 Kable)和一个 ggplot 的绘图。为了避免重复将它们全部写出来(这将花费我很长时间),我尝试使用 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 函数似乎都不起作用。

我在这方面遇到了很多麻烦,并且迫切需要时间来提交这份报告,因此非常感谢任何帮助!如果有更好的方法,请告诉我!

感谢您的帮助!

【问题讨论】:

    标签: r r-markdown


    【解决方案1】:

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

    ```{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() 传递到控制台(至少在我的应用程序中是这种情况)。

    【讨论】:

    • 嗨!所以它似乎适用于绘图,但是当我尝试输出 kable(mtcars$j) 或用 ggplotly 包装的 ggplot 时,它没有输出任何东西?即使我将它们包装在函数中。任何线索这里发生了什么以及如何解决它?
    • 不幸的是,我也没有解决方案。一个有点愚蠢但可能可行的解决方案是首先生成您提到的图形/表格并将它们保存在本地(使用htmltools::save_html(),然后将本地保存的 HTML 输出导入 RMarkdown-report。但是,我相信有更好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多