thb*_*tgn 4 html markdown r knitr r-markdown
我一直在开发一个RMarkdown文档来使用knitr包生成 HTML 报告。
我成功地在 YAML 标头中包含了一个包含 includes:选项的 HTML 文件。
问题是我只能在 3 个选项(https://rmarkdown.rstudio.com/html_document_format.html#includes)之间进行选择:
我想将此 HTML 文件包含在我的 RMarkdown 文档中我想要的位置,例如在特定部分中。
你知道我怎么做吗?
我发现了一个类似的问题,但答案对我没有帮助。
如果你想包括一个独立的 HTML文件,这是一个非常不好的做法与包括它in_header,before_body或after_body或cat(readLines(...))。  
一个独立的 HTML文件是标签一个简单的文本文件。一个最小的HTML文件看起来像这样:
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>title</title>
  </head>
  <body>
    <!-- page content -->
  </body>
</html> 
要有效,HTML文件必须符合许多约束条件。例如,可以只有一个<body>元素。因此,如果您在另一个文档中包含一个独立 HTML文档HTML,则会得到一个HTML包含两个<body>元素的文件。所以,这是一个无效的HTML文件。
这样的文件可能会在浏览器中被严重渲染(大多数浏览器会尝试“理解”它,即使它是无效的)或者可能会使它崩溃。因此,您必须选择一种能够生成有效 HTML文件的解决方案。
我看到两个选项来呈现有效 HTML文件。
knitr子文档在此处查看有关子文档的文档。我认为这是最适合您的问题的解决方案。
HTML在<iframe>元素中包含外部文件您可以HTML在<iframe>元素中嵌入任何外部文件。这是一个可重现的示例。
假设您有以下文件名 embedded_file.Rmd
---
title: "Embedded file"
output: html_document
---
This is the content of the embedded file.
这是main.Rmd文件的内容:
---
title: "Include external html file"
output: html_document
---
```{r generate-external-report, include=FALSE}
rmarkdown::render('embedded_file.Rmd')
```
External `HTML` file can be included in an `<iframe>` element:
```{r, echo=FALSE}
htmltools::tags$iframe(title = "My embedded document", src = "embedded_file.html")
```
渲染时main.Rmd,您会得到一个<iframe>带有嵌入文件的文件。您必须设置 的宽度和高度<iframe>才能获得好看的效果<iframe>。
为什么不使用htmltools包?就像在这个类似的答案中一样     
```{r, echo=FALSE}
htmltools::includeHTML("my_text.html")
```
也许这是一个丑陋的黑客,但只需创建你的html文件并在你的 markdown 中,创建一个像这样的代码块:
```{r, results='asis'}
cat(readLines('my_text.html'))
```
不要忘记末尾有一个空行,否则你会收到一个难看的警告。
也许这就是@Clock Slave 所指的。
编辑:
既然我对此投了反对票,我至少想发表评论。正如 @romles 指出的,一个 html 文件只允许有一个body标签。因此,使用我的readLines命令,您不应该读取完整的 HTML 文件,但您可以读取段落或表格等。这应该不是问题。所以一个小例子可以是
<h1>My test html file</h1>
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.</p>
<ul>
  <li>bla</li>
  <li>blubb</li>
</ul>