數(shù)組也是 R 語言的對象,R 語言可以創(chuàng)建一維或多維數(shù)組。
R 語言數(shù)組是一個同一類型的集合,前面我們學(xué)的矩陣 matrix 其實就是一個二維數(shù)組。
向量、矩陣、數(shù)組關(guān)系可以看下圖:
R 語言數(shù)組創(chuàng)建使用 array() 函數(shù),該函數(shù)使用向量作為輸入?yún)?shù),可以使用 dim 設(shè)置數(shù)組維度。
array() 函數(shù)語法格式如下:
array(data = NA, dim = length(data), dimnames = NULL)
參數(shù)說明:
data 向量,數(shù)組元素。
dim 數(shù)組的維度,默認是一維數(shù)組。
dimnames 維度的名稱,必須是個列表,默認情況下是不設(shè)置名稱的。
以下示例我們創(chuàng)建一個 3 行 3 列的的二維數(shù)組:
# 創(chuàng)建兩個不同長度的向量 vector1 <- c(5,9,3) vector2 <- c(10,11,12,13,14,15) # 創(chuàng)建數(shù)組 result <- array(c(vector1,vector2),dim = c(3,3,2)) print(result)
執(zhí)行以上代碼輸出結(jié)果為:
, , 1 [,1] [,2] [,3] [1,] 5 10 13 [2,] 9 11 14 [3,] 3 12 15 , , 2 [,1] [,2] [,3] [1,] 5 10 13 [2,] 9 11 14 [3,] 3 12 15
使用 dimnames 參數(shù)來設(shè)置各個維度的名稱::
# 創(chuàng)建兩個不同長度的向量 vector1 <- c(5,9,3) vector2 <- c(10,11,12,13,14,15) column.names <- c("COL1","COL2","COL3") row.names <- c("ROW1","ROW2","ROW3") matrix.names <- c("Matrix1","Matrix2") # 創(chuàng)建數(shù)組,并設(shè)置各個維度的名稱 result <- array(c(vector1,vector2),dim = c(3,3,2),dimnames = list(row.names,column.names,matrix.names)) print(result)
執(zhí)行以上代碼輸出結(jié)果為:
, , Matrix1 COL1 COL2 COL3 ROW1 5 10 13 ROW2 9 11 14 ROW3 3 12 15 , , Matrix2 COL1 COL2 COL3 ROW1 5 10 13 ROW2 9 11 14 ROW3 3 12 15
如果想獲取數(shù)組元素,可以通過使用元素的列索引和行索引,類似坐標形式。
# 創(chuàng)建兩個不同長度的向量 vector1 <- c(5,9,3) vector2 <- c(10,11,12,13,14,15) column.names <- c("COL1","COL2","COL3") row.names <- c("ROW1","ROW2","ROW3") matrix.names <- c("Matrix1","Matrix2") # 創(chuàng)建數(shù)組 result <- array(c(vector1,vector2),dim = c(3,3,2),dimnames = list(row.names, column.names, matrix.names)) # 顯示數(shù)組第二個矩陣中第三行的元素 print(result[3,,2]) # 顯示數(shù)組第一個矩陣中第一行第三列的元素 print(result[1,3,1]) # 輸出第二個矩陣 print(result[,,2])
執(zhí)行以上代碼輸出結(jié)果為:
COL1 COL2 COL3 3 12 15 [1] 13 COL1 COL2 COL3 ROW1 5 10 13 ROW2 9 11 14 ROW3 3 12 15
由于數(shù)組是由多個維度的矩陣組成,所以我們可以通過訪問矩陣的元素來訪問數(shù)組元素。
# 創(chuàng)建兩個不同長度的向量 vector1 <- c(5,9,3) vector2 <- c(10,11,12,13,14,15) # 創(chuàng)建數(shù)組 array1 <- array(c(vector1,vector2),dim = c(3,3,2)) # 創(chuàng)建兩個不同長度的向量 vector3 <- c(9,1,0) vector4 <- c(6,0,11,3,14,1,2,6,9) array2 <- array(c(vector1,vector2),dim = c(3,3,2)) # 從數(shù)組中創(chuàng)建矩陣 matrix1 <- array1[,,2] matrix2 <- array2[,,2] # 矩陣相加 result <- matrix1+matrix2 print(result)
執(zhí)行以上代碼輸出結(jié)果為:
[,1] [,2] [,3] [1,] 10 20 26 [2,] 18 22 28 [3,] 6 24 30
另外我們可以使用 apply() 元素對數(shù)組元素進行跨維度計算,語法格式如下:
apply(x, margin, fun)
參數(shù)說明:
x 數(shù)組
margin 數(shù)據(jù)名稱
fun 計算函數(shù)
以下我們使用 apply() 函數(shù)來計算數(shù)組兩個矩陣中每一行對數(shù)字之和。
# 創(chuàng)建兩個不同長度的向量 vector1 <- c(5,9,3) vector2 <- c(10,11,12,13,14,15) # 創(chuàng)建數(shù)組 new.array <- array(c(vector1,vector2),dim = c(3,3,2)) print(new.array) # 計算數(shù)組中所有矩陣第一行的數(shù)字之和 result <- apply(new.array, c(1), sum) print(result)
執(zhí)行以上代碼輸出結(jié)果為:
, , 1 [,1] [,2] [,3] [1,] 5 10 13 [2,] 9 11 14 [3,] 3 12 15 , , 2 [,1] [,2] [,3] [1,] 5 10 13 [2,] 9 11 14 [3,] 3 12 15