林嶔 (Lin, Chin)
Lesson 1
R有非常先進的數據視覺化系統
R有很多進階數據分析工具
R是完整的資料科學解決方案
– 與其他統計軟體相比,R語言更接近程式語言,因此在熟悉以後更能建立自己的常規工作pipeline,加快自己的工作效率。
– 與其他程式語言相比,R語言更專注在統計分析功能的開發上,因此相關的功能較完善,比較容易找到合適的函數進行運算。
– R語言是生物資訊、統計分析、資料科學領域上的強勢語言,這些都是醫學院的學生未來比較有可能涉獵的領域。
要開始使用R語言,你必須先到CRAN下載檔案,安裝後才可以使用
除此之外,我建議大家先至Rstudio官網下載Rstudio,它可以使用圖形介面支援一些基礎功能
安裝完畢後,請打開Rstudio,並開啟第一個Project作為第一堂課上課練習之用。
– 因此,使用R的第一步,請先將他當作一個高級的計算機。
– 請試著在左邊的Console視窗中,輸入下列程式碼,並體會他的計算功能
# 四則運算
123 + 489
145 * 12
# 括弧優先規則
(1 + 2) * 3
# 指數運算
12^4
– 『函數』的使用方式是打下特定的字句,並且在『小括號』內輸入參數作為「input」,接著電腦將會根據你的指令進行回答。
函數「exp()」:負責進行自然指數運算
函數「sqrt()」:負責進行平方根運算
函數「log()」:負責(自然)對數運算
exp(2)
sqrt(10)
log(3)
– 有趣的是,『函數』中的『input』不見得只能有1個,如函數「log()」可以額外輸入對數的底數,並以『,』進行分隔:
log(3, base = 3)
log(4, base = 2)
– 需要注意的是,如果我們不告訴電腦哪個是底數,哪個是運算目標,哪個是底數,那他將會依序認為你輸入的第一個數為需要被運算的數,而第二個數為底數:
log(9, 3)
log(8, 2)
– 註:物件的屬性有很多種,我們第二節才會對他進行詳細的介紹
– 注意,等號的右邊為「input」,等號的左邊為「output」
x = 2 * 2 * 3
print(x)
– 如果你只是需要查看物件內容,事實上直接輸入物件名稱也可以達到相同效果
x
– 物件強大的地方在於,我們可以將其做為暫存的工具,並且可以直接對「x」物件進行運算
x/4
– 函數「c()」中間以逗點為界,此函數可以將不同「數字」合併在同一個物件內
x = c(1, 2, 3, 4, 5)
x
x^3
x = c(1, 2, 3, 4, 5)
y = c(6, 7, 9, 8, 10)
y - x
x * y
– 問題1:請試著利用物件,列出1至10的平方根與3次方結果
– 問題2:請試著告訴我「%%」這個運算符號的意義(利用物件功能大量運算將有助於你總結規律得到答案)
x = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
x = 1:10 #也可以用這樣
sqrt(x) #也可以用"x^(-1/2)"
## [1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751
## [8] 2.828427 3.000000 3.162278
x^3
## [1] 1 8 27 64 125 216 343 512 729 1000
x = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
x %% 3
## [1] 1 2 0 1 2 0 1 2 0 1
x %% 4
## [1] 1 2 3 0 1 2 3 0 1 2
接著我們將學習利用物件索引叫出物件內的特定內容
在R裡面,「中括號」是索引函數,在物件的後面使用「中括號」,將可以叫出指定位置的內容
y = c(6, 7, 9, 8, 10)
y[1]
y[c(3, 5)]
y[6]
y = c(6, 7, 9, 8, 10)
y[-1]
y[-c(3, 5)]
y[7] = 3 * 5
y
y[3] = -1
y
y[3] = y[1] + y[2]
y[6] = y[4] * y[5]
y
– 註,每個人的X不一樣(以下範例數字為3的範例),由老師指定
## [1] 1 3 4 12 16 192 208
y = c(1, 3)
y[3] = y[1] + y[2]
y[4] = y[2] * y[3]
y[5] = y[3] + y[4]
y[6] = y[4] * y[5]
y[7] = y[5] + y[6]
y
## [1] 1 3 4 12 16 192 208
y = c(1, 3)
i = 1
y[i+2] = y[i] + y[i+1]
i = 2
y[i+2] = y[i] * y[i+1]
i = 3
y[i+2] = y[i] + y[i+1]
i = 4
y[i+2] = y[i] * y[i+1]
i = 5
y[i+2] = y[i] + y[i+1]
y
## [1] 1 3 4 12 16 192 208
變數(Variable)層:邏輯(logical)向量、整數(integer)向量、因子(factor)向量、數字(numeric)向量、文字(character)向量
陣列(Array)層:矩陣(matrix)、資料表(data.frame)
列表(List)層:列表(list)、S3物件(S3 class)、S4物件(S4 class)
在這裡我們先不要被一大堆名詞定義給嚇到,我們先從簡單的變數(Variable)層物件開始認識,其他的部分到我們開始使用後再學習。
變數層中有幾個函數相當重要:
– 函數「as.XXX()」:可以強迫某個向量內所有的內容全部轉換為該種類
– 函數「class()」:可以查詢該物件的屬性
a = c(TRUE, FALSE, TRUE, FALSE)
class(a)
b = c(1, 2, 3, 4, 5)
class(b)
b1 = as.integer(b)
class(b1)
c = c(0.7, -0.9, 1.2, -2.1, 3.7)
c1 = as.integer(c)
c1
d = c("A", "B", "C", "C", "B")
class(d)
d1 = as.factor(d)
d1
e = c(c, d)
e
class(e)
e1 = c(c1, d1)
e1
class(e1)
函數「length()」可以查詢該向量的長度
函數「levels()」可以查詢因子向量的類別種類
d = c("A", "B", "C", "C", "B")
class(d)
d1 = as.factor(d)
d1
n = length(d1)
n
categories = levels(d1)
categories
categories = levels(d1)
n.categories = length(categories)
n.categories
# 用下列這串意思一樣
n.categories = length(levels(d1))
n.categories
x = c(16, 6, 13, 1, 3, 4, 14, 11, 11, 10, 9, 4, 6, 3, 9, 4, 2, 14, 17, 13, 16, 9, 6, 16, 1, 1,
9, 5, 8, 6, 14, 11, 13, 17, 3, 9, 20, 9, 11, 4, 17, 8, 3, 16, 8, 4, 8, 9, 20, 14, 14, 5,
14, 6, 4, 6, 6, 13, 1, 9, 6, 14, 16, 9, 20, 16, 9, 13, 13, 4, 2, 5, 8, 14, 18, 16, 16, 4,
18, 11, 18, 11, 10, 6, 5, 17, 9, 11, 13, 20, 8, 8, 16, 9, 13, 4, 3, 17, 16, 9, 6, 8, 3, 8,
2, 20, 11, 14, 16, 8, 11, 13, 1, 4, 20, 16, 17, 3, 16, 5, 20, 20, 5, 4, 5, 16, 6, 11, 10,
2, 17, 13, 18, 2, 13, 2, 9, 2, 9, 13, 16, 8, 5, 11, 6, 18, 9, 9, 5, 11, 1, 8, 5, 2, 9, 16,
1, 3, 5, 6, 2, 1, 9, 16, 20, 6, 4, 6, 8, 3, 5, 13, 17, 6, 1, 6, 4, 9, 6, 6, 5, 5, 5, 17, 8,
13)
– 問題:請試著告訴我…
這串數列有共幾「個」數字?
共有幾「種」數字在物件「x」內?
這個數列中缺少了1至20中的哪些數字?
length(x)
## [1] 186
length(levels(factor(x)))
## [1] 16
lvl.x = levels(factor(x)) # 首先先把所有的數字種類找到,但此時是文字格式
idx.x = as.integer(lvl.x) # 將文字改成索引值
y = 1:20 # 建立一個全新的1至20完整向量
y[-idx.x] # 列出索引值「以外」的數字!
## [1] 7 12 15 19
– 我們已經學到下列功能,這些功能對於往後的應用都相當重要: