如何根据一个数据集从RMarkdown中最好地生成多个HTML文件?

时间:2014-10-10 17:07:11

标签: r knitr rstudio pandoc r-markdown

我有一个非常有用的RMarkdown报告,并且已经增长到几页,包含HTML文件中的所有数字和表格。

它对所有图表使用相同的数据集。

我想要做的是继续生成这个大的html文件,然后生成几个新的子目录,每个子目录都有自己的html文件和子目录,每个子目录都有自己的html文件。

在这种情况下,完整报告包含部门的数据,然后每个子目录将包含与部门内每个组相关的html输出,并且每个子目录将包含每个组中每个人的html输出的子目录。这样,如果某人只对一个组或一个人的指标感兴趣,他们会查看最合适的输出。

Parent dir: The same large html file with figures and tables generated with data for entire dept.
|
 __Subdir for each group: Output based on same data but only the group's metrics
    |
     __Subdir for each person: Output based on same data but only individual's metrics

安排这个的最佳方式是什么?
1.在RMardkown中是否有代码块选项,我可以说,chunk a在这个html输出文件中,chuck b进入另一个?
2.我是否需要多个RMarkdown文件,每个html输出一个,它们之间有某种缓存,所以我不必重新处理所有数据? (这看起来很傻,因为我需要很多html文件)
3.我应该放弃RMarkdown来完成这项任务吗?

1 个答案:

答案 0 :(得分:3)

我做了像你这样的事情,并与knitr一起提出,而且效果非常好。

不要告诉任何人,但我会使用' for'循环遍历一堆议会,每个委员会得到相同的报告,但他们的数据。然后我将报告推送到目录结构中,压缩并邮寄。

我有一个Rmd文件,需要两个数据集,setA(作为主题)和setB(作为其对等)

流程如下:

set <- assemble_data() # loads whole set
for (report in report_list) {
    setA <- filter(set, subject == report)
    setB <- filter(set, subject != report)
    output_html <- str_c('path/',report,'.html')
    knit_interim <- str_c('path/',report,'md')
    knit_pattern <- 'name of RMd' # I generate more than one report for each place
    knit(knit_pattern) 
    markdowntoHTML(file = knit_interim, output=output_html, stylesheet=stylesheet, encoding='windows-1252')
}

通过这种方式,我可以在几分钟内生成报告集。我的情况可能比你的情况简单,因为报告结构是相同的 - 它是变化的数据集。

请注意,这不是代码的粘贴(它比这稍微复杂一点),所以要注意错别字等。

关键点(据我所知)是编写一个Rmd,它需要一个特定名称的数据集,而R代码为它提供了本地范围。我最初用它挣扎但是它的执行非常简单。

[更新:&#39;如何将数据传递到RMd文件?&#39;

你没明确需要。在上面的代码中,RMd写入了期望setA和setB中的数据。

它使工作流程变得非常简单 - 您使用数据集编写模板(手动过滤一个),然后当您准备就绪时,您可以运行循环。就像我说的那样,我起初有点挣扎,但只是跳了进来,这一切都很顺利。