R語言從入門到精通:Day3
- 2019 年 10 月 6 日
- 筆記
在大概了解了R語言和在自己電腦上安裝了Rstudio之後,相信大家對學習使用R語言迫不及待了。接下來,我們會推出一系列的推文來幫助大家由淺入深的學習R語言,保證每一個同學在這系列推文結束的時候都能成為R語言編程的大牛。
溫馨提示
本節內容難點較多,務必緊跟紅色標記,牢記重點內容。
R語言作為一種程式語言,在生物資訊和生物統計學中應用非常廣泛。學習R語言的初期和學習其他程式語言一樣,我們首先要了解在R語言中的各種數據類型及其用法。R語言中有許多存儲數據的對象類型,包括了標量、向量、矩陣、數組、數據框和列表。這些數據結構之間的關係如圖1所示。

圖1:R中的數據結構
下面我們就從向量開始,逐一學習每種數據結構。
1. 向量(vector)
要求:掌握
向量是用於存儲數值型、字元型或邏輯型數據的一維數組(通俗的來講,就是「一串」東西)。
向量的創建
執行組合功能的函數c()可用來創建向量,c是英文concatenate的縮寫,代表連接的意思,可以將多個散在的元素合併成一個向量。如圖2所示:

圖2:向量的創建和數據類型
向量的類型
向量的類型包括數值型、字元型和邏輯型等等,我們可以通過上圖中的函數typeof()可以用來查看數據類型,這裡,a是數值型向量,b是字元型向量,c是邏輯型向量。
向量的索引
所謂「索引(index)」就是獲取向量中的某一個元素的內容。具體怎麼索引呢?我們在創建向量之後,通過在方括弧中給定元素所在位置的數值就可以訪問向量中的元素。如圖3所示:

圖3:向量元素的訪問
(注意:R語言中向量的第一個元素所在位置是1,不是0,和其它程式語言不同!)
圖3中a[2:4]等價於a[c(2,3,4)],這裡冒號:是一個非常重要的操作符,它可以用於生成一個連續的整數向量,這個用法在以後的學習會經常出現。
2. 矩陣(matrix)
要求:掌握
矩陣的創建
矩陣是一個二維數組,和向量類似的是,矩陣中的每個元素也擁有相同的模式。可以用函數matrix()創建。如圖4所示:

圖4:矩陣的創建
圖4中,我們通過matrix函數創建了一個按列填充的5行,4列的矩陣。有些同學可能會想創建一個按行填充的並且每行或者每列都有自定義的行列名的矩陣,這些可以通過修改matrix()中的參數實現。如圖5所示:

圖5:函數matrix()的參數
關於函數matrix()的詳細用法,大家可以在Rstudio裡面輸入?matrix或者help(「matrix」)查看幫助文檔。在之後的學習或者使用R語言的過程中,遇到新的函數,也可以用同樣的辦法查看幫助文檔。切記:不會的東西就打問號?哦。
矩陣的索引
創建好矩陣之後,對矩陣中元素的訪問和向量很類似,如圖6所示。

圖6:矩陣元素的訪問
對矩陣元素的訪問而言,y[i, j]表示訪問矩陣y中第i行,第j列的元素,圖6中還展示了同時訪問多列數據的方法,訪問多行數據的情況與之類似。
3. 數組(array)
要求:了解
在矩陣的學習中提到矩陣是二維數組,那麼數組就是和矩陣類似的數據結構,但是數組的維度可以大於2。可以與函數array()創建,如圖7所示:

圖7:多維數組的創建
數組和矩陣的訪問方式非常類似,這裡就不給大家一一列舉了,大家可以自己實際操作一下。同樣的,關於函數array()的更多參數和用法,大家可以通過參看幫助文檔的方法來了解更多。
4. 數據框(data.frame)
要求:掌握
數據框的構建
在前面介紹的幾種數據類型中,都只能包含同模式的數據,但是在實際的數據分析過程中,所有的數據類型都保持一致幾乎是不可能的,比如在處理生物數據時,基因型和基因表達量就是兩種完全不一樣的數據類型。R語言中數據框(data.frame)作為一種相比於矩陣、數組更一般的數據類型,將成為你最常處理的數據類型。數據框的創建如圖8所示:

圖8:數據框的創建
如上圖所示,通過data.frame()函數可以創建數據框,而且數據框中每一列的名稱就是每一列向量的名稱,當然這些名稱也可以自己修改,感興趣的同學可以試著學習一下函數colnames()。
數據框的索引
數據框中元素的訪問有兩種方法,一種和之前提到的矩陣、數組的訪問方式一樣,通過元素在數據框中的位置來訪問,比如pdata[i, j];另一種則可以用到數據框的列名加$符號即可索引。具體方法如圖9所示,這裡pdata$status中的記號$,被用來選定數據框中某一列。

圖9:數據框中元素的訪問
以下內容了解即可:大家會發現,status在pdata中出現時,被附加了一個levels屬性,這是因為在R中變數又可以分為名義型、有序型和連續型,比如pdata中的age就是連續型變數,treat就是名義型變數,而這裡例子中定義的status就應該是一個有序型變數。名義型和有序型變數都是類別變數,圖9中的levels就代表了status有三個類別:poor、improve、perfect。將status定義為一個有序型變數需要用到函數factor()。如圖10所示:

圖10:有序型變數的定義
名義型和有序型變數在R語言的應用也相當廣泛。函數factor()的用法和參數也不在這裡一一展開了。
5. 列表(list)
要求:了解
列表的創建
最後一種數據類型是列表(list),也是R語言中最複雜的一種數據類型。一般來說:列表就是一些對象的有序集合,比如:某個列表中可能是若干變數、矩陣、數據框,甚至其他列表的組合。列表可以用函數list()來創建,如圖11所示:

圖11:列表的創建
列表的索引
列表中元素的訪問和矩陣、數組很類似,觀察圖11,相信大家也能猜到列表的元素訪問方法了。具體的訪問實例如圖12所示:
在圖12中,mylist$data和mylist[[2]]都訪問同樣的向量,這意味著列表中的元素訪問是非常靈活的,這使得列表成為R語言中重要的數據結構。

圖12:列表的訪問實例
許多R函數的運行結果都是以列表的形式返回的,結果中的資訊則由你自己根據實際情況來取捨了。

小結
這次的課程給大家介紹了R語言中的各種數據類型,內容比較多,對大家要求較高,希望各位能夠花點時間自己動手操作一下,操作不熟練的同學,文末有本節課程的測試程式碼哦~~
下次會給大家帶來數據的導入,這樣在下次課程之後大家就可以開始用R語言處理自己的數據了。希望隨著課程的推進,大家可以舉一反三,更好的理解自己的數據背後隱藏的資訊。

說好的,期期皆有福利乾貨,本期乾貨如下:
本期乾貨
·
!!R語言常用語法程式碼示例 !!