R markdown笔记02-from bookdown.org

@[toc](

R markdown的笔记02)

参考 R 数据分析指南与速查手册 第5章内容

1. R Markdown 可以做什么?

  1. 单篇文档:
    • R分析报告(html_notebook)
    • html/pdf/word_document
    • 仪表盘(flexdashboard::flex_dashboard)
    • PPT(powerpoint_presentation)
  2. 书(bookdown框架):
    HTML版本:gitbook、ctexbook、html_book
  • pdf版本(pdf_book)
  • epub版本(epub_book)
  • 格式和书一样丰富的单篇文档:
    • HTML文档(html_document2)
    • PDF文档(pdf_document2)
    • word文档(word_document2
  1. 网站(bolgdown框架)

2. 为什么用R_Markdown

  1. 类似jupyter笔记本,将代码和输出结合在一起

  2. 有利于可重复性分析报告(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. 添加附件

点击下载附件 data.csv

效果为点击文字即可下载附件

5. 与代码的交互

  1. 行内代码

  2. 代码块
    作为一个块,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. 表格格式设置

  1. 普通的data.frame可以用knitr::kable(align= , )函数展示。
  • align参数设置对齐,“l”为左对齐,“c”为居中,“r”为右对齐。也可以用长度等于列数的向量来设置每一列的对齐方式。
  • digits参数控制小数点位数,相当于给每一个数值传入round函数。- - caption给出表标题。下面为一个例子。

knitr::kable(head(iris), align="c")

iris数据集前6行
  1. 如果是tibble格式,在某些格式设置(如html_document中)下可直接输出。

library(tidyverse)
as_tibble(head(iris))

7. 交互式图表

改变每页显示的行数、按某一列进行排序、多页之间进行跳转、搜索表格中你想要的数据。

library(DT)
datatable(iris, options = list(pageLength = 5))

得到的效果如下:


it’s just a picture

交互式图

例一:

library(dygraphs)
dygraph(nhtemp, main = "New Haven Temperatures") %>%
dyRangeSelector(dateWindow = c("1920-01-01", "1960-01-01"))

得到效果如下:


it's just a picture again

例二:

library(plotly)
p <- ggplot(data = diamonds, aes(x = cut, fill = clarity)) +
geom_bar(position = "dodge")
ggplotly(p)

得到效果如下:


it’s a pic again

例三:网络图

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)

得到效果如下


效果无法上传到此,可自行在rstudio中尝试

例五: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

效果:


do u know this palace

7. gif图呈现

将一系列数据图转化为gif

你可能感兴趣的:(R markdown笔记02-from bookdown.org)