在R中生成报告

时间:2016-05-08 07:54:59

标签: r pdf latex report knitr

我目前正在R中编写一个软件包,我想编写一个函数来生成标准化的pdf报告,包括文本和图像,图表等。

我曾经多次使用knitr,但我想使用单个(预定义)函数生成一个报告,以便为最终用户提供便利。

目前,我倾向于编写一个生成knitr输出并将其转储到文件的函数,但是,这将要求用户执行必要的pdflatex命令以将生成的文件转换为实际报告。 此外,这将使工作目录与辅助文件等混乱......

如果有人知道或知道最好的方法,我欢迎任何建议。

3 个答案:

答案 0 :(得分:1)

我倾向于将我的分析/输出放在函数中,但我仍然使用顶部的YAML和几个块从.Rmd文件中调用它们。下面是一个简单的.rmd文件,我用它来浏览其他命令...(我的经理似乎喜欢点击'Knit Word'或'Knit HTML'就好了。)

---
title: "My Title"
output:
  word_document:
    fig_caption: yes
    fig_height: 3.5
    fig_width: 6.5
    reference_docx: template.docx
  html_document:
    fig_caption: yes
    fig_height: 3.5
    fig_width: 6.5
    keep_md: yes
    toc: yes
---


```{r initialize, results='hide'}
library(knitr)
ProjRoot <- 'E:/Dropbox/test'
setwd(ProjRoot)
opts_chunk$set(dpi=150)
```


```{r Analysis, results='hide'}
source('E:/Dropbox/test/myFunction.R')
load('E:/Dropbox/test/5parm.rdata')
myFunction
```

上面的我的函数(myFunction.R)将倾向于严重依赖knitr :: kable或pander :: pandoc.table来表。我有一系列辅助函数,例如,下面的函数.H2,打印出第二级标题

.H2 <- function(text) {
  pander::pandoc.header(text, 2)
}

因此,在标记中删除标题会非常轻松

答案 1 :(得分:1)

所以我提出的解决方案是将.Rmd报告文件模板放在包的/inst/rmd/文件夹目录中,然后编写如下函数:

generateReport = function(df,output_format=NULL,output_file=NULL,output_dir="./",...){

  #Determine the template
  theFile = system.file("rmd/report.Rmd", package="MYPACKAGENAME")

  #Process the Arguments
  args               = list(...)
  args$input         = theFile
  args$output_dir    = output_dir
  args$output_format = output_format
  args$output_file   = output_file

  #Run the render
  outputFileName  = do.call('render',args=args)
  invisible(outputFileName)
}

报告本身依赖于一个名为'df'的对象,该对象被传递给上述函数。可以添加更多检查,实际上我已经在我的工作版本中完成了这项工作,上面简单地说明了基础知识。

答案 2 :(得分:0)

我写了shell script,它将常规的R脚本作为输入,输出带有R输出的PDF文档,包括图。

它的工作原理是使用诸如

之类的模板创建一个带有所有必要样板的中间R脚本
#'\documentclass[a4paper,10pt]{printout}
#'\title{@@SCRIPTNAME@@}
#'\begin{document}
setHook(packageEvent("lattice", "attach"),
        function(...) {
            lattice.options(default.theme=standard.theme(color=FALSE))
            trellis.par.set(fontsize=list(text=9, points=6))
        })
opts_chunk$set(dev='pdf', fig.width=6, fig.height=4.5,
               fig.path='./fig/@@SCRIPTSHORTNAME@@-')

@@SCRIPT@@

#'\end{document}

然后spin()编辑为PDF。我认为可以做类似的事情 在R。