knitr
更新日期:
用R实现自动化报告
word的整理简单而繁琐,简单的是:我只要将书上的例题用R实现就可以了,繁琐的是我需要将运行无误的代码和图片复制粘贴到word文档中。尤其在复制代码时,不可避免地要将提示符>也复制进来,而这个无疑对以后看这篇文档,进而复制运行代码的人是一个大麻烦,要不停地去除提示符。
近来,翻看网上文档,发现对于这个问题:整理R代码进而展示,别人已经解决了,而且解决的很漂亮,解决这个问题的大神就是谢益辉。
大神发明了一个包:knitr,用来展示代码及运行结果,而且展示结果非常直接美观。同时,查看文档的人可以直接复制运行代码,而不必一个一个地去掉提示符了,这简直不能更赞了……
knitr包可以生成MarkDown、html、pdf、word格式的文件,每一种文件都有相应的语法格式,我比较倾向于使用MarkDown,简单而实用。参考资料1中详细说明了语法格式:
以三个反引号和一对大括号开始R代码,以三个反引号开始正文,上面的hello world例子已经显示了代码段的基本结构。行内代码放在`r `之中,全局选项在`ro or`中(R options)。
简单的示例:
hello, the value of 2 * pi is `r 2*pi`
foo-label} rnorm(5)
我们也可以在文件中生成图片,并进行展示。如果要生成的图片是通过R语言代码来实现的,那么就可以通过添加echo = FALSE
来进行显示统计图形。
示例:
= FALSE} plot(cars,xlab = "速度")
如果要添加本地图片就可以通过Markdown语法来实现,[]是对图片的定义,()里面是图片的路径,建议采用相对路径。center指定图片居中。
示例:
<center>

当然这个报告里面可以添加交互式图形,利用rCharts包就可以实现。
对于文本输出,knitr设计的也很人性化。参考资料1中的说明如下:
代码高亮(highlight=TRUE),增强可读性,有无数的高亮主题可选,仅适用于LaTeX和HTML输出,MD文档在转为HTML文档之后可以用专门的JavaScript库去高亮代码
代码重排(tidy=TRUE),对那些不注意代码格式的人来说很有用,再乱的代码,到了这里也会变得相对整齐,本功能由formatR包支持
执行或不执行代码(eval=TRUE/FALSE),不执行的代码段将被跳过,原样输出源代码
显示/隐藏源代码(echo=TRUE/FALSE),甚至精确控制显示哪几段代码(echo取数值)
显示/隐藏普通文本输出或将文本输出以原样形式输出(results=’markup’, ‘hide’, ‘asis’)
显示/隐藏警告文本(warning=TRUE/FALSE)、错误消息(error)和普通消息(message)
显示/隐藏整个代码段的输出(include=TRUE/FALSE),比如我们可能想运行代码,但不把结果写入输出中
示例:
, eval = TRUE ,highlight=TRUE,tidy=TRUE,echo=1:2} k = 0 ;for ( i in 1:5){k = i+k } ;return(k)
输出结果为:
k = 0
for (i in 1:5) {
k = i + k
}
## [1] 15
对于表格文件,可以采用xtable来实现,但是这个包将表格转为latex格式,使用print函数将其以html格式显示,不过显示结果保留着原始HTML表格的风格。
示例:
library(xtable)
print(xtable(head(mtcars[, 1:5])),type = "html")
到这里,大多数的需求基本都满足了,剩下的就是写了。
参考资料
【1】knitr中文文档