一、knitr
R-Markdown通过嵌入R
code块的方式可以很好的创建动态文档。创建的文档是独立可重复的,并且可以分享。
R-Markdown允许R用户在markdown文档中插入R
code。然后通过knitr编译得到html文件。
1、创建R-Markdown文档
点击File -> New File -> R Markdown,如下所示
会看到如下所示的对话框。选择左侧的“Document”,并填写标题和作者,点击"OK"。
得到R-Markdown文档
2、编译R-Markdown文档
单击"Knit HTML"按钮可以生成一个HTML文件;如果想嵌入R代码做计算,需要在代码块内编辑。如下所示:
```{r
Code Chunk, chunk options here...}
# R code
here...
```
(1)可以通过R对象opts_chunk设置全局选项
opts_chunk$set(echo
= FALSE, fig.height = 4)
其中echo:控制R代码块是否可见。设置为FALSE表示隐藏R代码,但会运行代码块并输出结果到文档。如果你只是为了显示而不需要运行一个代码块,设置eval
= FALSE即可。
fig.height
:设置图像的高度
```{r Code chunk, echo = FALSE} # R code will be evaluated but not shown in the final HTML
document
# Userful when only plots / charts / text / output needs to be
shown
# and that generated it...
```
几个常用概念:
代码段:就是独立段落的R代码,每段代码必须有唯一的标签
行内代码:嵌入文字的小代码
局部选项:在代码段上方的<<>>=标记里设置
全局选项:用opts_chunk$set()设置,它对所有文档格式都通用(包括Rnw以及后面要介绍的Rhtml、Rmd等)
(2)MESSAGE参数
message参数用于设置是否显示控制台输出的信息,message = FALSE表示不显示。
```{r
Code Chunk, message = FALSE}
# R code
# Messages from R-Console will not show up in
finaldocument
```
(3)RESULTS参数
在代码块执行完后,控制结果的输出形式。包括文本、图表和图形的输出。有四个取值:
markup—标记显示;asis—文本显示;hold—末尾显示;hide—隐藏。
```{r Code Chunk, results = 'markup'}
# R code will be evaluated but not shown in the final HTML document # Useful when only plots / charts / text output needs to be shown and not the
# code that generated it...
```
(4)文本输出相关功能
代码高亮(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),比如我们可能想运行代码,但不把结果写入输出中
(5)表格输出
表格实际上也是纯文本构成的,但R没有自带的表格生成函数,所以我们往往需要特殊处理。视输出格式不同,我们可以使用knitr::kable()函数或xtable包或ascii包来把R对象(尤其是数据框)转化为相应格式的表格代码,此时需要我们使用原样输出,如:
knitr::kable(head(mtcars[, 1:5]))
(6)图相关选项
fig.*设置用来控制生成的文档中图表的显示情况。下面举例说明
fig.path:用来设置图形输出的路径,对大型报告来说,我们可能希望把各种乱七八糟的文件归类管理,所以R图形文件可以用这个选项写入单独的文件夹
dev:设置用哪种图形设备记录图形,自带二十多种常见的图形设备,如PDF、PNG甚至tikz,具体取值参见网站上的文档
fig.width和fig.width:设置图形文件本身的宽高尺寸(单位英寸)
out.width和out.height设置图片在输出文档中的宽高,这是相对Sweave来说的新选项
fig.keep:设置保留图形的方式,可以完全不保留,也可以只保留高层作图函数生成的图形,也可以保留低层作图函数产生的图形
fig.show:设置图形显示的方式,可以跟在作图代码后面即刻显示出来,也可以等到代码段运行完毕之后再把该段中所有图形一气儿显示出来,也可以把所有图形显示为动画
宽度和高度
宽度和高度分别由fig.width和fig.heigh参数控制,默认单位为英寸。如下(示例中用到的diamonds是plotly包自带的数据集):
```{r Code Chunk, fig.width = 2, fig.height = 2}
library(plotly)
library(ggplot2)
set.seed(100)
df
plot_ly(df, x = x, y = price, mode = "markers", color = cut, size = z) %>%
layout(title = "Diamonds"))
```
对齐方式
由graphics和ggplot2得到的图形对齐方式可通过fig.align = 'left'/'right'/'center'分别设置成左对齐,右对齐,居中。下图设置图形居中(默认是左对齐)
```{r Code Chunk, fig.align='center'}
library(ggplot2)
df
ds
ggplot(df, aes(x = gp, y = y)) +geom_point() +geom_point(data = ds, aes(y = mean),colour = 'red', size = 3)
```
如果图形是由plot_ly()函数得到的,需要使用标签。下图得到的文档支持图形在右侧(各个chunk options所代表的意义请参照上面)
```{r Code Chunk1, eval = FALSE}
library(plotly)
library(ggplot2)
set.seed(100)
df
plot_ly(df, x = x, y = price, mode = "markers", color = cut, size = z) %>%
layout(title = "Diamonds"))
```