【问题标题】:Append HTML Files with R用 R 附加 HTML 文件
【发布时间】:2014-01-20 05:21:19
【问题描述】:

我正在使用knitr 创建一堆 HTML 文件,可以将其视为主文档的单独章节。在我创建完所有这些章节之后,我想创建一个文件,其中每个 HTML 文件都附加在另一个之下。

我能想到的唯一方法是集成所有模板以创建一个主模板,配置图像的所有路径等,以便它们在主模板的一部分时仍然有效,然后编译。这听起来需要付出很多努力,我希望有更好的解决方案。

有什么想法吗?

2014 年 1 月 22 日根据knit_html 建议添加:

我的文件夹结构是这样的 -

./Templates/Chapter1.Rmd
./Templates/Chapter2.Rmd
./Client1/Chapter1/Chapter1.html
./Client1/Chapter2/Chapter2.html
./Client2/Chapter1/Chapter1.html
./Client2/Chapter2/Chapter2.html

客户端文件夹中不存在 Rmd,甚至不知道要编织到的路径,直到我调用它并明确告诉它要编织到哪个文件夹。

现在我需要一个./Templates/CompileItAll.Rmd,它可以产生一个./Client1/Compiled.html 和一个./Client2/Compiled.html。我认为底层会起作用,并且确实如此,但是它在输出中可以看到的每个孩子的开头添加了一个<!DOCTYPE html>。我尝试指向 md 文件,它添加了 rmd 文本,但由于某种原因省略了来自 ./Client/Chapter/* 的源图像 -

```{r child='../Client1/Chapter1/Chapter1.html'}
```
```{r child='../Client1/Chapter2/Chapter2.html'}
```

我是不是做错了什么?

我还尝试了下面的代码,它也省略了源图像。 (我知道路径在这段代码中不起作用,但为了简单起见,我一直保持这种方式,我认为意图很明确)

```{r}
setwd('./Client1/Chapter1')
```

```{r child='./Templates/Chapter1.Rmd'}
```

【问题讨论】:

  • 您也可以使用 XML 包解析您的 HTML 文件(或应用一些正则表达式)并根据需要添加子文件,但恕我直言,创建主文档将是一个更明智的解决方案。
  • knit_childset_parent 可能是一种方法
  • @daroczig,你说'理智的解决方案',我听说涉及更多的努力:)
  • @baptiste, knit_child 看起来很有希望。让我试试看,我会回到这个线程。
  • 为了避免<!DOCTYPE html>,使用knit2html(..., fragment.only = TRUE)这样你就只能得到<body></body>之间的内容

标签: r knitr r-markdown


【解决方案1】:

不是knitr 解决方案,但可能会有所帮助:要简单地加入一堆 HTML 文件,您可以使用 pandoc。如果您在终端中输入下面的代码,它将把两个文件合二为一。

pandoc -f html -t html -o file.html file1.html file2.html 

但我怀疑这种方法会给你一个很好的布局。它只是连接的内容,仅此而已。我同意@daroczig 对此的评论。

【讨论】:

  • 谢谢马克,但我更喜欢基于 R 的解决方案。虽然串联内容可能足以满足我的目的。
猜你喜欢
  • 2010-11-05
  • 1970-01-01
  • 2020-05-23
  • 2015-06-18
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多