4. 向量、矩陣和數組
4.1 向量
4.1.1 序列
除了使用冒號運算符之外,R還支持其他函數創建更為通用的序列。其中,seq函數最為常見,能以許多不同的方式指定序列。在平常使用中針對不同的場景,我們有以下三類函數可供使用,他們運行效率更高且更易用,滿足了特定場合的使用。
seq.int 可創建一個序列,序列的範圍由兩個數字指定,還可以設置步長,值得註意的是雖然seq.int以int結尾他同樣支持創建浮點數形式的序列,如
seq.int(0.1,0.01,-0.01) [1] 0.10 0.09 0.08 0.07 0.06 0.05 0.04 0.03 0.02 0.01
seq_len函數:創建一個從1到輸入值的的序列
seq_along函數:創建一個從1開始,長度是輸入向量長度的序列
pp <- c( "peter", "piper", "picked", "a", "peck", "of", "pickled", "peppers" ) for( i in seq_along(pp) ) print(pp[i]) [1] "peter" [1] "piper" [1] "picked" [1] "a" [1] "peck" [1] "of" [1] "pickled" [1] "peppers"
PS:在閱讀官方文檔後,如果不是特別追求運行效率或者你的序列特別長時,建議還是掌握seq()的使用方法
4.1.2 長度
我們可以通過length函數查到這個值。缺陷值也會被計入長度。
4.1.3 命名
R向量的一個大特性就是能給每個元素命名。通常,標記元素可使得代碼可讀性更強。
x <- 1:4 names(x) <- c( "apple", "bananas", "kiwi fruit", "" ) x apple bananas kiwi fruit 1 2 3 4
4.1.4 索引向量
通常,我們只要訪問向量中的部分或個別元素。這就是所謂的索引,他用方括號[]實現。
1.若給向量傳入正數,它會返回此位置上的向量元素切片。他的第一個位置是1(同行python是0)
2.若給向量傳入負數,它會返回一個向量切片,裏面只有除了負數絕對值位置上的所有元素
3.使用which函數可以返回邏輯向量為TRUE的位置,若將邏輯索引切換到整數索引中,這個函數將很有用
x <- (1:5)^2 which(x > 10) [1] 4 5
4. which.min和which.max分別是which(min(x))和which(max(x))的縮寫
4.1.5 向量循環和重復
rep函數非常適合此類任務,它允許我們重復使用元素來創建矢量
rep(1:5, 3) [1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
4.2 矩陣和數組
數組是多維的矩陣,所以除了行和列之外,數組還需要維度dim參數
4.2.1 創建數組和矩陣
數組:array()
矩陣:matrix()
4.2.2 行、列和維度
對於矩陣和數組,dim函數將返回其維度的整數值向量
對於矩陣而言,函數nrow和ncol將分別返回行數和列數
4.2.3 行名、列名和維度名
與輸出維度函數類型,顯示行名、列名和維度名的函數為rownames()、colnames()、dimnames()
4.2.4 索引數組
索引矩陣與索引向量類似。若要顯示所有元素,只需空置對應的下標即可
4.2.5 合並矩陣
可以使用cbind和rbind函數按行和列來綁定兩個矩陣
cbind(a_matrix,another_matrix) ##橫向合並 ein zwei drei vier funf sechs one 1 5 9 2 10 18 two 2 6 10 4 12 20 three 3 7 11 6 14 22 four 4 8 12 8 16 24 rbind(a_matrix, another_matrix) ##縱向合並 ein zwei drei one 1 5 9 two 2 6 10 three 3 7 11 four 4 8 12 five 2 10 18 six 4 12 20 seven 6 14 22 eight 8 16 24
4.2.6 矩陣算術
數組和矩陣支持標準算術運算符(+、-、×、/),除了這些矩陣還有如
轉置
t函數可用於轉置矩陣 t(a_matrix)
內乘
a_matrix %*% t(a_matrix) ##內乘
外乘
1:3 %o% 4:6 #外乘,o為outer的含義
矩陣的逆
使用solve函數可以很簡單的實現矩陣的求逆
4. 向量、矩陣和數組