【问题标题】:Is there a way to use tabset for finished R markdown files有没有办法为完成的 R markdown 文件使用 tabset
【发布时间】:2021-06-18 23:11:33
【问题描述】:

所以我有 17 个完全独立的 R markdown 文件。他们运行良好。但是,我想将它们合并为一个并有一个标签集,以便用户可以选择一个而不是全部 17 个。

现在,我知道如何在每个 r markdown 文件中使用 tabset。例如,我创建的很多图表都有四个迭代,所以我使用 tabset 让用户选择哪个迭代。在这种情况下,每次迭代都基于就业的数字阈值。

例如,我创建了两个通用的 R 降价,并命名为 test1 和 test2。使用第三个 R markdown 文件(同样,只是 file>new>R Markdown),我将如何在选项卡集中引用 test1 和 test2?

【问题讨论】:

  • 这似乎有点不清楚(而且,缺少一个例子,有点假设)。您想将 17 个已渲染的 rmarkdown 文件合并到一个文档中的 iframe 的 rmarkdown 等效项中吗?或者您是否在问如何重写您的流程以在选项卡集的每个选项卡中包含子文档?我认为这将受益于给定 2-3 个独立 rmd 文档以形成一个具有 2-3 个选项卡的示例。
  • 在这种情况下,您可以设计一个类似 wordpress 的网站,根据需要创建页面(在选项卡集中)并上传 rmarkdown 文件以供参考(网址),以便您单击一个特定选项卡,它会打开引用的 URL(和特定的 rmarkdown 页面)..
  • @r2evans,我将如何保存这个示例。不知道您可以将文件附加到此。为清楚起见,我想使用通过单击文件>新文件>R markdown>html获得的标准R markdown文档。所以生产其中的 3 个(编织/渲染每个),然后基本上将前两个嵌套在第三个中。
  • Tim,对于一个完整且可重复的问题,最好提供简单的示例,例如我在回答中提供的sub_*.Rmd 文档。许多回答者要么时间紧迫,要么只是懒惰,因此尽可能简单地“尝试一些东西”是很有意义的。关键:简单、简短、可重复等。希望答案有所帮助。

标签: r tabs output markdown


【解决方案1】:

没有自动化的方法可以做到这一点,但这里有一个使用 HTML iframe 的 hack(无论好坏)。

首先,两个假设:

  • 所有 HTML 文件都需要完整,如果它们不是“独立的”,那么所有路径(相对或绝对)也必须适用于父 HTML 文档;和

  • 可以有一个明确的命名约定或要包含的已知文件列表;在这里,我将所有的子文件命名为sub_*.html,以便父文档可以轻松找到它们,但是这部分有很多方法可以调整。只要能智能生成下面的htmlfiles就可以了。

创建下级“页面”

我将其命名为sub_base.Rmd

---
title: "base"
output: html_document
---

```{r, echo = FALSE, message = FALSE}
plot(mpg ~ disp, data = mtcars, pch = 16)
```

姓名:sub_ggplot2.Rmd

---
title: "ggplot2"
output: html_document
---

```{r, echo = FALSE, message = FALSE}
library(ggplot2)
ggplot(mtcars, aes(disp, mpg)) + geom_point()
```

父文档

我将其命名为combine.Rmd

---
title: "combined"
output: html_document
---

# Different Graphics {.tabset}

```{r results='asis', echo=FALSE}
htmlfiles <- list.files(".", pattern = "sub.*\\.html$", full.names = TRUE)
for (html in htmlfiles) {
  hdr <- gsub("^sub_", "", tools::file_path_sans_ext(basename(html)))
  cat(
    sprintf('## %s\n\n <iframe src="%s" title="%s frame" style="position:absolute;height:60%%;width:60%%;"></iframe>\n\n',
            hdr, html, hdr)
  )
}
```

关键是你首先需要一个包含{.tabset}样式的标题,然后循环需要生成唯一的子标题。这可以通过 ## 后跟从属 ### 来完成,交给您和其他组合文档结构/美学。

渲染

rmarkdown::render("sub_base.Rmd")
rmarkdown::render("sub_ggplot2.Rmd")
rmarkdown::render("combine.Rmd")

结果

您可能想要调整 iframe 组件以满足您的需要,但当页面足够大时,它们会显示滚动条。

文件大小

在此示例中,我保留了使 HTML 文件自包含的默认行为。报告和两个绘图中几乎没有任何内容,这导致分布为 230 万。这样做的好处是您只需要分发单个文件:渲染一个combine.html,它嵌入了从属文档的内容。

如果您需要(无论出于何种原因)保持其中任何一个不是独立的,那么分布将会改变:除了需要多个文件和子目录之外,整体大小也更大:本示例为 12M。 (在这种情况下,您需要分发所有 sub_*.html 文件和 sub_*_files/ 子目录。)

【讨论】:

    猜你喜欢
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 2019-08-19
    相关资源
    最近更新 更多