@[toc](
参考 R 数据分析指南与速查手册 第5章内容
1. R Markdown 可以做什么?
- 单篇文档:
- R分析报告(html_notebook)
- html/pdf/word_document
- 仪表盘(flexdashboard::flex_dashboard)
- PPT(powerpoint_presentation)
- 书(bookdown框架):
HTML版本:gitbook、ctexbook、html_book
- pdf版本(pdf_book)
- epub版本(epub_book)
- 格式和书一样丰富的单篇文档:
- HTML文档(html_document2)
- PDF文档(pdf_document2)
- word文档(word_document2
- 网站(bolgdown框架)
2. 为什么用R_Markdown
类似jupyter笔记本,将代码和输出结合在一起
-
有利于可重复性分析报告(Reproducible reports)。将说明文字、数据、代码、计算结果、可视化图表等结合在一起,其中的计算结果与可视化图表由对应的代码自动生成,而不是先在其他环境中运行代码、保存结果、再将结果复制粘贴到报告中。这就是可重复性分析报告
- 代码与文字结合,易于解读,排版方便
- 结果由代码直接生生,利于改动
- 只要数据源不作假,结果、图表都不可能伪造
3. 文档总体设置
YAML代码块:YAML块是Rmd文件最上方进行全局设置的代码块,上下被3个减号包围。不是Markdown语法,而是YAML语法。下面是一个典型的块:
---
title: "name ur titile"
author: "me"
date: "2021-1-30"
# 以html输出
output:
html_document:
theme: cerulean
toc: true
# toc_depth: 2
toc_float:
true
number_sections: true
# 以word输出
output:
word_document
theme: cerulean
toc: true
# toc_depth: 2
toc_float:
true
number_sections: true
---
设置 | 解释 |
---|---|
title、author、date | 文章标题、作者、日期 |
output | 输出文档格式 |
theme | 主题设置 |
toc | 目录 |
上级和下一级之间有两个空格。
常见格式见标题1
其他设置见[yihui xie,R Markdown: The Definitive Guide]https://bookdown.org/yihui/rmarkdown/#preface)
4. 富文本格式
4.1 普通文本
直接输入即可。不同模块之间最好用一行空格隔开,以防歧义。
输出含有中文的PDF时,一般需要有特别的设置:
如果有中文,LaTex 引擎需要选择为 xelatex,可以通过这张图的方式进行更改:
小齿轮->output format:PDF
小齿轮->advanced->LaTeX engine:改为xelatex
或者在开头输入:
output:
pdf_document:
latex_engine: xelatex
如果中文全部空白,更改LaTex 的配置,用中文字体来渲染(渲染什么意思?):
outputs:
pdf_document:
includes:
in_header: header.tex
latex_engine: xelatex
header.tex可以是以下内容
\usepackage{xeCJK}
\setCJKmainfont{楷体} % 字体可以更换
\setmainfont{Georgia} % 設定英文字型
\setromanfont{Georgia} % 字型
\setmonofont{Courier New}
2. 分段
在两段的代码之间空一行(多敲一次回车)。输出结果会显示合适的段间距,但不会输出一个空行。
4. 各级标题
半角的#代表标题,有几个#就是几号标题。级别越多,字体越小。
一级标题可以不加#,在下表加一行=也表示一级标题。
二级标题则可以用一行-表示
1级标题
===================================
任意正文
2级标题
------------------------------------
任意正文
如果全局设置标题为编号的方式,而需要某个标题不编号,则在标题后添加{-}
或 {.unnumbered}
即可。
5.分隔线
单行3个及以上的减号-,该行没有其他符号,且与上下文本之间有空行分隔,则显示为分隔线。如:
上一部分文本
------------------------------------
下一部分文本
二级标题的-上下两行均不存在空行。
6. RMarkdown 的注释
文本注释:依然可使用Ctrl+Shift+C的快捷键,其结果为在待注释的文本前添加
R代码注释:无论是行内代码还是代码块,对于代码正文(不包括前后的斜引号及大括号里面的内容)来说,依然可使用Ctrl+Shift+C的快捷键,其结果与普通R脚本中的注释相同,为在待注释的文本前加井号#,文本注释与R代码注释举例如下:
这是行内R代码注释r # notes
这是未被注释的Markdown文本
# 这是R代码中的文本注释,和R脚本中的文本注释相同
# a <- "this is the notes of code"
b <- "this is normal code" # notes
7. 无序列表
在每一条前面添加减号
-
或加号+
或乘号*
,并用空格将该符号与文本分隔,则显示为无序列表。列表的各条之间如果有空行,间距视为段间距,如果没有空行,间距视为行间距。
三种符号之间可以任意混用。对显示效果没有影响。但建议同一级列表采用同一种符号开头。建议多级列表依次采用减号
-
、加号+
与乘号*
开头,超过3级循环使用。-
次级列表比上级列表至少多空2个空格或1个Tab键,建议采用空一个Tab的形式。
- 这是次级列表。
-
多段列表:
后面的段落与第一段列表开头对齐,且与前一段之间有空行。
列表中含代码块,列表终止,见pandoc文档 https://pandoc.org/MANUAL.html#pandocs-markdown
8. 有序列表
在每一条前面添加一个数字与点,并用空格将该符号与文本分隔,则显示为数字有序列表。
数字可以是任意非负整数,可以是多位数,且不必按顺序写,可用重复数字,显示的序号从第1条的数字开始编号。
替代方案有
- 用英文圆括号将数字括起来开头,符号和文本之间用空格分隔。
- 数字后面接一个后圆括号,项目符号和文本之间用空格分隔。
以上两种方式,显示的效果依然为数字加点的形式。
- 次级数字列表比上级列表至少多空3个空格或2个Tab键,也即项目符号至少和上一级的正文对齐,建议用3个空格的形式。
- 在每一条前面添加一个小写字母与点,并用至少1个空格将该符号与文本分隔,则显示为小写字母有序列表,显示的序号从第1条的字母开始编号。
- 在每一条前面添加一个大写字母与点,并用至少2个空格将该符号与文本分隔,则显示为大写字母有序列表,显示的序号从第1条的字母开始编号。
- 项目符号不能是字母组合,且不必按顺序写。
10. 斜体
- 用星号*括起来即可。
- 也可用下划线_代替星号,但此时前下划线必须与前面的文本之间用空格分隔。
- 当待加粗的文本本身含有*时,在文本的星号前加上反斜杠即可。
11. 加粗
- 用2个星号*括起来即可。
- 也可以用下划线_代替星号,
前下划线必须与前面的文本之间用 空格分隔。
12. 粗斜体
- 用3个星号*括起来即可,
- 也可以用下划线_代替星号,前下划线必须与前面的文本之间用 空格 分隔。
13. 行内代码文本
斜引号(重音符) ` 括起来即可
含有n个不连续的斜引号要用n+1对斜引号括起来:如为了显示```code```
,代码应该有七个斜引号。
14. 代码文本块
在三个点后边加个‘r’,这段代码块将会高亮显示。
注意不要用括号将r括起来,否则会被视为可执行的r代码。
15-17. 下表、上标与同是上下标
文本前后插入一对^,则该文本显示为下标。如x1显示为x1。
x~1~^2^显示为x12
18. 行内公式与公式块
行内公式用一对美元符号$包围LaTeX公式
公式块则用两个$$来包围
LaTeX的具体公式另行查阅。
20. 特殊字符与转义符
转义符为反斜杠\,当符号具有特殊功能时,要想输出符号本身,在前面加转义符。
单独的大括号可以正常输出,如{},或左括号{,右括号}。
21. 链接
对于文本就是网址的情况来说,无需特殊格式,输入该超链接的文本,系统会自动识别其为超链接。注意该文本应与周围文本用空格分隔。
对文本不同于网址的情况来说,格式为显示文本
22. 插入图片
格式为 ![图片说明](C:/users/lenovo/图片路径),注意图片路径中为正斜杠而不是反斜杠,包含文件名本身。
如果图片所在位置就在项目所在文件夹,在文件名前加点与斜杠,如[图片说明](./fig.png)显示为
如果图片的代码与上下文之间不空行,图片显示的格式如同引用块,单独在下一行。图片后面的文字也会另起一行,但不显示图片说明。如果图片的代码与上下文之间都空行,则会显示图片说明。图片说明在图片下方左侧显示,灰色字体区别于正文的黑色。
当路径中含中文时,在Rstudio浏览器中无法正常显示;当路径不含中文,文件名为中文时,无法在R脚本窗口显示。所以建议路径和文件名都用英文。
如果想控制图片的显示尺寸,可以用下面的方式:
```{r echo=FALSE, fig.cap="插入本地图片", out.width = '30%'}
knitr::include_graphics("./fig.png")
```
在上面的方法中,将路径名改为网址,还可以插入来自网络的图片(以及本地或网络的gif动图),如
```{r echo=FALSE, fig.cap="来自网络的图片", out.width = '30%'}
knitr::include_graphics("https://d33wubrfki0l68.cloudfront.net/aee91187a9c6811a802ddc524c3271302893a149/a7003/images/bandthree2.png")
```
23.插入表格
Right Left Center Default
------- ------ ---------- -------
12 12 12 12
123 123 123 123
1 1 1 1
Table: Demonstration of simple table syntax.
#这样最右边一格之内会有两行。
: Sample grid table.
# 用冒号控制左右和居中
+---------------+---------------+--------------------+
| Fruit | Price | Advantages |
+===============+===============+====================+
| Bananas | $1.34 | - built-in wrapper |
| | | - bright color |
+---------------+---------------+--------------------+
| Oranges | $2.10 | - cures scurvy |
| | | - tasty |
+---------------+---------------+--------------------+
| Right | Left | Default | Center |
|------:|:-----|---------|:------:|
| 12 | 12 | 12 | 12 |
| 123 | 123 | 123 | 123 |
| 1 | 1 | 1 | 1 |
: Demonstration of pipe table syntax.
注意:
- 表的代码结尾必须空行。
- 表头上方可以有一行减号,也可以没有。
- 如果每行内容都是单行,则表主体部分各行之间无需符号分隔,表头与主体之间用减号分隔。
- 如果需要表内包含多行内容,则结尾必须添加虚线后再空行,虚线可以连续,也可以间断。表头上方必须有一行减号。处于表格不同行的内容,用空行分隔。处于表格同一行,但文本上不同行的内容,分行,但是不用空行分隔。
- 表头可以省略,但是表头与表主体之间的分隔符不能省略。当表头省略时,结尾必须添加虚线后再空行,虚线可以连续,也可以间断。
24、25. 引用块和对勾框
在每一段文本(包括空行)前加入>与空格.
可用LaTeX中的语法产生对勾框:,对勾:
26-29 字体、字号、文字颜色、背景颜色
用HTML语法实现字体、字号、颜色。
······
如楷体显示为楷体 ,Times New Roman显示为Times New Roman
······
如字号25px显示为字号25px
······
如红色文字显示为红色文字 ,文字色号#33C0FF显示为文字色号#33C0FF
如背景为黄色显示为背景为黄色 ,背景色号为#33FF8B显示为背景色号为#33FF8B
实测在html_document里用······照样可以实现。
31. 对齐
默认为左对齐。
可用HTML语法实现其他对齐。
居中
这是居中对齐的段落。
右对齐
这是右对齐的段落。
分散对其
这是分散对齐的段落,文字不到一行。
32. 缩进
······
缩进两个汉字宽度的形式,可以设置为2em或32px
悬挂缩进
超过一行的段落,第1行未进行缩进,接下来所有行都进行了缩进。缩进的宽度是可以调节的。以上代码是缩进5个汉字宽度的形式。
整体左缩进
所有行左侧都进行了缩进两个字符。
整体左右均缩进
所有行左、右侧都进行了缩进两个字符
33-34. 插入视频、音频
scr就是source,插入本地音视频时需要写清格式,如果在同一文件夹下可以直接写文件名
来自本地的视频。
35. 添加附件
效果为点击文字即可下载附件
5. 与代码的交互
行内代码
代码块
作为一个块,R代码会被执行,结果会在下方的另一个块中显示出来,如果是数值或文本,前面会以两个井号开头。如果有警告或报错,也会显示出来。
6. 代码块选项
更多设置可见yihui xie,knitr
或者我的另一篇R markdown笔记03-knitr01
1-7
代码 | 解释 |
---|---|
eval=F : |
代码块不执行但依旧会显示 |
echo=F : |
代码不显示结果、报错等但是会执行 |
result='hiden' |
代码会执行但不会显示结果 |
results='asis' |
结果显示为原本的样子,段前没有#,没有灰色背景 |
collapse = TRUE |
代码与结果在一块,中间没有分割 |
warning = FALSE |
不显示警告 |
error = FALSE |
不显示报错 |
message = FALSE |
不显示通知信息 |
include = FALSE [1] |
仅执行代码,不显示代码,不显示结果,不显示警告、报错等等 |
[1]: 等价于echo=FALSE, results = 'hide', warning = FALSE, message = FALSE
8. 全局代码设置
所有代码均执行相同的设置,则在第一个代码块中按照如下的方式设置。
knitr::opts_chunk$set(fig.width = 8, collapse = TRUE)
9. 图片格式设置
参数 | 含义 |
---|---|
out.width/height | 设置图片相对宽度/高度[1] |
fig.width=6 | 图片宽度为6英寸 |
fig.height=6 | 图片高度为6英寸[2] |
fig.align="····" | 设置图片对齐(’center’、’left’、’right’) |
fig.cap="····" | 设置图标题。 |
fig.show='hold' | 多幅图并列显示 |
[1]: 参数为百分数形成的字符串。
[2]: 长宽的绝对值,单位为英寸。
10. 表格格式设置
- 普通的data.frame可以用knitr::kable(align= , )函数展示。
- align参数设置对齐,“l”为左对齐,“c”为居中,“r”为右对齐。也可以用长度等于列数的向量来设置每一列的对齐方式。
- digits参数控制小数点位数,相当于给每一个数值传入round函数。- - caption给出表标题。下面为一个例子。
knitr::kable(head(iris), align="c")
- 如果是tibble格式,在某些格式设置(如html_document中)下可直接输出。
library(tidyverse)
as_tibble(head(iris))
7. 交互式图表
改变每页显示的行数、按某一列进行排序、多页之间进行跳转、搜索表格中你想要的数据。
library(DT)
datatable(iris, options = list(pageLength = 5))
得到的效果如下:
交互式图
例一:
library(dygraphs)
dygraph(nhtemp, main = "New Haven Temperatures") %>%
dyRangeSelector(dateWindow = c("1920-01-01", "1960-01-01"))
得到效果如下:
例二:
library(plotly)
p <- ggplot(data = diamonds, aes(x = cut, fill = clarity)) +
geom_bar(position = "dodge")
ggplotly(p)
得到效果如下:
例三:网络图
library(visNetwork)
nodes <- data.frame(id = 1:6, title = paste("node", 1:6),
shape = c("dot", "square"),
size = 10:15, color = c("blue", "red"))
edges <- data.frame(from = 1:5, to = c(5, 4, 6, 3, 3))
visNetwork(nodes, edges) %>%
visOptions(highlightNearest = TRUE, nodesIdSelection = TRUE)
得到效果如下
例五:3维挺newbeer的可以通过鼠标拖动并改变大小的图
(例四为heatmap,忽略)
library(threejs)
z <- seq(-10, 10, 0.1)
x <- cos(z)
y <- sin(z)
scatterplot3js(x, y, z, color=rainbow(length(z)))
例六:可交互式地图
可玩度比较高,搭配度分秒转化函数(jd()函数)可以根据已知经纬度进行定位,并在地图上呈现出来。
library(leaflet)
m <- leaflet() %>%
addTiles() %>% # Add default OpenStreetMap map tiles
addMarkers(lng=174.768, lat=-36.852, popup="The birthplace of R")
m
###度角分转化为小数函数
jd <- function(a,b,c){
m <- a+b/60+c/3600
return(m)
}
### result
> longitude<- jd(116,23,26.93)
> latitude <- jd(39,54,56.92)
> Imperial_Palace <- leaflet() %>%
+ addTiles() %>% # Add default OpenStreetMap map tiles
+ addMarkers(lng= longitude, lat=latitude, popup="The gu palace")
> Imperial_Palace
效果:
7. gif图呈现
将一系列数据图转化为gif