-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathtips.qmd
133 lines (89 loc) · 3.91 KB
/
tips.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# Tips {.unnumbered}
## 管道操作%>% {#pipline}
为什么R要这样写代码?`%>%`(pip operator)到底什么意思?
参考[R语言高效的管道操作magrittr | 粉丝日志 (fens.me)](http://blog.fens.me/r-magrittr/)
`%>%`看我代码中频繁出现, 这个操作符只有在加载`magrittr`后才能用。
我们先看一个简单的程序
1. 取1000个随机数符合,符合正态分布。
2. 求这个1000个数的绝对值,同时乘以50。
3. 把结果组成一个100*100列的方阵。
4. 计算方阵中每行的均值,并四舍五入保留到整数。
5. 画出直方图。
```{r}
#| echo: true
# 设置随机种子
set.seed(101)
# 开始
n1<-rnorm(1000) # 第1步
n2<-abs(n1)*50 # 第2步
n3<-matrix(n2,ncol = 100) # 第3步
n4<-round(rowMeans(n3)) # 第4步
hist(n4) # 第5步
```
上面的代码写法是,每一行实现一个条件,但中间多了不少的**临时变量**。这无疑额外创建了很多没用的变量,对计算机来讲,就是垃圾变量占用内存,对于设计者来讲,看起来眼花。
想一想,还有没有其他写法?
我们看看下面这个,这是不同的嵌套,一层一层,将5步,一句语法实现。
```{r}
#| echo: true
set.seed(101)
hist(round(rowMeans(matrix(abs(rnorm(1000))*50,ncol=100))))
```
::: callout-warning
结果是一样。但这个写法,会让人觉得有点崩溃,一层套一层,稍有不慎,就少个括号,并且读起来半天才知道是做什么的。
:::
为了让代码读起来更像**人话**,我们就用到`%>%`,避免了创建一些无意义的中间变量,又看起来步骤分明。从里到外,一步一步,就像管道一样。
```{r}
#| echo: true
# 加载magrittr
library(magrittr)
# 设置随机种子
set.seed(101)
# 开始
rnorm(1000) %>%
abs %>% `*` (50) %>%
matrix(ncol=100) %>%
rowMeans %>% round %>%
hist
```
看起来好爽。每一步都很清晰。
::: callout-note
magrittr包,主要定义了4个管道操作符,分另是%>%, %T>%, %$% 和 %<>%。其中,操作符%>%是最常用的,其他3个操作符,与%>%类似,在特殊的使用场景会起到更好的作用。请大家自学
:::
## 为什么要用Quarto 或R Markdown
Quarto 或 R Markdown 是学术写作的未来。因为他们既可以使用markdown语法,又可以运行代码,输出结果。R Markdown曾被认为是可以运行代码的Markdown。
你可以试试。
```{r}
#| echo: true
plot(cars) # 可以运行代码,输出结果
```
和
``` r
plot(cars) # 只是代码,并不能运行,肯定也不能输出结果
```
::: callout-warning
这两种语句有什么不同。
:::
想了解更多,可以看看我在B站具体的解释。
https://www.bilibili.com/video/BV1aP411A7TV/
如何创建Quarto和R Markdown文件
https://www.bilibili.com/video/BV14m4y1c7wM/
## R的一些基础操作
### R的工作目录
R的默认工作目录在所有操作系统里一般都是家目录里。可以先查看一下
```{r}
#| echo: true
getwd()
```
"/home/rsliang/Demo",这是我的电脑上默认的工作目录。在这个目录下,你放了任何文件,都可以直接使用相对路径
比如这时候你可以直接用相对路径调用数据集"dataset/***.csv"。
```{r}
read.csv("dataset/stroke.csv") %>%
head()
```
假设我的工作目录不是这里呢?比如我把工作目录换了,因为我这个目录下面没有dataset文件夹,更没有stroke.csv文件,所以自然会报错,无法执行。
```{r}
setwd("/home/rsliang/") #若设定工作目录为这个
# read.csv("dataset/stroke.csv") 如果运行这条语句会报错
```
另外还有个办法,也比较有效,那就是打开R的项目(project)文件,后缀名为.Rproj的文件,打开以后,就默认这个所在的文件夹就是根目录,可以直接在右侧files选项卡,会显示当前项目的内容。
![project文件](image/tips/project.png)