learning_R

R markdown笔记02-from bookdown.org

2021-01-30  本文已影响0人  ks_c

@[toc]( <center>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
  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 目录

<font color="blue">上级和下一级之间有两个空格。</font>

常见格式见标题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. 无序列表

8. 有序列表

在每一条前面添加一个数字与点,并用空格将该符号与文本分隔,则显示为数字有序列表。

数字可以是任意非负整数,可以是多位数,且不必按顺序写,可用重复数字,显示的序号从第1条的数字开始编号。

替代方案有

以上两种方式,显示的效果依然为数字加点的形式。

10. 斜体

11. 加粗

12. 粗斜体

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中的语法产生对勾框:\Box,对勾:\checkmark

26-29 字体、字号、文字颜色、背景颜色

用HTML语法实现字体、字号、颜色。

<span style="font-family:字体;">······</span>
如<span style="font-family:楷体;">楷体</span>显示为楷体 ,<span style="font-family:Times New Roman;">Times New Roman</span>显示为Times New Roman

<span style="font-size:字号;">······</span>
如<span style="font-size:25px;">字号25px</span>显示为字号25px

<span style="color:颜色;">······</span>
如<span style="color:red;">红色文字</span>显示为红色文字 ,<span style="color:#33C0FF;">文字色号#33C0FF</span>显示为文字色号#33C0FF

如<span style="background-color:yellow;">背景为黄色</span>显示为背景为黄色 ,<span style="background-color:#33FF8B;">背景色号为#33FF8B</span>显示为背景色号为#33FF8B

实测在html_document里用<font face="宋体" size=25px color="blue">······</font>照样可以实现。

31. 对齐

默认为左对齐。
可用HTML语法实现其他对齐。

居中
<p style="text-align:center;">
这是居中对齐的段落。
</p>

右对齐
<p style="text-align:right;">
这是右对齐的段落。
</p>

分散对其
<p style="text-align:justify;">
这是分散对齐的段落,文字不到一行。
</p>

32. 缩进

<p style="text-indent:32px;">······</p>
缩进两个汉字宽度的形式,可以设置为2em或32px

<p style="text-indent:-5em;padding-left:5em;">
悬挂缩进
</p>
超过一行的段落,第1行未进行缩进,接下来所有行都进行了缩进。缩进的宽度是可以调节的。以上代码是缩进5个汉字宽度的形式。

<p style="padding-left:2em;">
整体左缩进
</p>
所有行左侧都进行了缩进两个字符。

<p style="padding-left:2em;padding-right:2em">
整体左右均缩进
</p>

所有行左、右侧都进行了缩进两个字符

33-34. 插入视频、音频

scr就是source,插入本地音视频时需要写清格式,如果在同一文件夹下可以直接写文件名

<video controls>
<source src="video-example.mp4" type="video/mp4">
</video>

<span style="font-size:12px;"> 来自本地的视频。</span>

<audio controls>
<source src="audio-example.mp3" type="audio/mp3">
</audio>

35. 添加附件

<a href="data.csv" download="data.csv">点击下载附件 data.csv</a>

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

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= , )函数展示。

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

上一篇下一篇

猜你喜欢

热点阅读