我目前正在R中编写一个软件包,我想编写一个函数来生成标准化的pdf报告,包括文本和图像,图表等。
我曾经多次使用knitr,但我想使用单个(预定义)函数生成一个报告,以便为最终用户提供便利。
目前,我倾向于编写一个生成knitr输出并将其转储到文件的函数,但是,这将要求用户执行必要的pdflatex命令以将生成的文件转换为实际报告。 此外,这将使工作目录与辅助文件等混乱......
如果有人知道或知道最好的方法,我欢迎任何建议。
答案 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。