-
Notifications
You must be signed in to change notification settings - Fork 10
/
ch2.Rmd
235 lines (185 loc) · 5.14 KB
/
ch2.Rmd
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
---
title: "單一變數與函數"
author: "郭耀仁"
date: "`r Sys.Date()`"
output: slidy_presentation
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, results = 'hide', warning = FALSE)
```
## 計算機
- 計算機是 R 語言的命令列(Console)最基本的應用!
- R 語言使用單行註解 `#` (pound)
- 在命令列試著進行加減乘除運算:
```{r}
# 在命令列依序輸入後觀察產出
2 + 1
2 - 1
2 * 2
4 / 2
2 ^ 2 # 次方,亦可以寫作 2**2
3 %% 2 # 餘數
```
## 建立變數
- R 語言的使用者習慣使用 `<-` 來建立變數
- 在 RStudio 中可以按 `Alt 與 -` 來產生 `<-` 符號
- R 語言是**動態型別語言**,這表示你可以很有彈性地改變變數
```{r}
# 在命令列依序輸入後觀察回傳
a <- 2
b <- 3
a
b
a * b
a <- 5 # 將 a 改變為 5
a
a * b
```
## 建立變數(2)
- 你也可以用與其他程式語言相同的 `=` 來建立變數
- 但是我推薦使用 `<-`
```{r}
a = 2
a
```
## 單一變數類型
- R 語言的基本變數類型
- 數字(numeric)
- 整數(integer)
- 複數(complex)
- 文字(character)
- 邏輯值(logical)
```{r}
# 在命令列依序輸入
num <- 2
int <- 2L
compl <- 2 + 3i
char <- "Hello" # 用引號告訴 R 語言這是一組字串
logi_t <- TRUE
logi_f <- FALSE
# 把這些變數輸出在命令列
num
int
compl
char
logi_t
logi_f
```
## 單一變數類型(3)
- 關於文字:
- 什麼時候用雙引號?什麼時候用單引號
[Joey Air Quoting](https://youtu.be/0O1z3An8CFc)
[Ross & his misshapen claw](https://youtu.be/w7PHVBb2-UM)
## 單一變數類型(2)
- 利用邏輯判斷運算子產出邏輯值
|邏輯判斷運算子|作用|
|---------|---|
|`==`|等於|
|`>`|大於|
|`<`|小於|
|`>=`|大於等於|
|`<=`|小於等於|
|`!=`|不等於|
|`%in%`|包含於|
```{r}
8 == 8
8 == 7
8 != 7
8 == "8" # TRUE
FALSE == "FALSE" # TRUE
1 == TRUE
0 == FALSE
2 == TRUE
2 >= TRUE
!TRUE
!FALSE
7 %in% c(7, 8)
6 %in% c(7, 8)
```
## 單一變數類型(3)
- R 語言的數值型變數運算時很有彈性
```{r}
# 在命令列依序輸入
num <- 2
int <- 2L
compl <- 2 + 3i
char <- "Hello" # 用引號告訴 R 語言這是一組字串
logi_t <- TRUE
logi_f <- FALSE
# 運算
num + int
num + compl
int + logi_t
logi_t * 5
```
- 但是字串的運算則不如 Python 或 Ruby 這麼彈性
```
char * 5 # Error
char + " World!" # Error
```
## 單一變數類型(4)
- 透過 `is.___()` 函數可以判斷變數類型
- 透過 `as.___()` 函數可以轉換變數類型
```{r}
is.integer(TRUE)
is.logical(TRUE)
as.numeric(TRUE)
as.integer(TRUE)
as.complex(TRUE)
as.character(TRUE)
```
## 單一變數類型(5)
- 日期
- 預設以西元 1970 年 1 月 1 日為 `0`,在這一天以後的每天都 `+1` 來記錄,而這一天以前的每天都 `-1` 來記錄
```{r}
sys_date <- Sys.Date()
sys_date # 看起來跟文字一樣
class(sys_date) # 是日期的格式
sys_date_char <- as.character(sys_date) # 創造一個文字類型
as.integer(sys_date)
as.integer(sys_date_char) # warning
date_of_origin <- as.Date("1970-01-01")
as.integer(date_of_origin)
date_of_origin + 1
date_of_origin - 1
```
## 單一變數類型(6)
- 時間
- 預設以西元 1970 年 1 月 1 日格林威治標準時間(Greenwich Mean Time,GMT)00 時 00 分 00 秒作為 0,在這個時間點以後的每秒都 `+1` 來記錄,這個時間點以前的每秒都 `-1` 來記錄
```{r}
time_of_origin <- as.POSIXct("1970-01-01 00:00:00", tz = "GMT")
as.integer(time_of_origin)
time_of_origin
time_of_origin + 1
time_of_origin - 1
time_of_origin_cst <- as.POSIXct("1970-01-01 08:00:00") # tz = CST
as.integer(time_of_origin_cst)
```
## 函數
- R 語言是一種**函數型編程**(functional programming)的程式語言
> Everything that happens is a function call.
> By [John Chambers](https://en.wikipedia.org/wiki/John_Chambers_(statistician))
- 習慣使用 `()` 來避免混淆變數與函數
```
class() # 回傳變數的類型
ls() # 目前環境中有哪些變數
rm() # 移除環境中的變數
getwd() # 目前的檔案路徑在哪裡
setwd() # 設定檔案路徑
Sys.Date() # 回傳系統日期
Sys.time() # 回傳系統日期與時間
q() # 離開 RStudio
```
## Windows 設定 locale
- 在 console 輸入這段指令可以切換與課程教材相同的 locale
```
Sys.setlocale(category = "LC_ALL", locale = "English_United States.1252")
```
## 隨堂練習
[單一變數與函數 - 隨堂練習](https://yaojenkuo.github.io/r_programming/ch2_exercise)
## 期中作業
1. 香港搖滾樂隊 Beyond 於 1983 年成立,我們假設成立日期是 1983-12-31,請將成立日期指派給 `beyond_start`
2. 請以系統日期計算今年是 Beyond 成立幾週年
3. 1999 年 9 月 21 日 1 時 47 分 16 秒發生震央位於南投縣集集鎮,芮氏規模 7.3 的地震,請以文字記錄這個時間,並將它指派給 `major_quake_time`
4. 1999 年 9 月 21 日 1 時 57 分 15 秒發生第一個芮氏規模超過 6 的餘震,請以文字記錄這個時間,並將它指派給 `first_aftershock_time`
5. 請將前兩題的生成的變數轉換為時間類型,計算間隔多久發生第一個芮氏規模超過 6 的餘震