矩陣

對於物件的每個維度,[ 運算子采用一個引數。向量具有一個維度並且採用一個引數。矩陣和資料框有兩個維度,有兩個引數,以 [i, j] 給出,其中 i 是行,j 是列。索引從 1 開始。

## a sample matrix
mat <- matrix(1:6, nrow = 2, dimnames = list(c("row1", "row2"), c("col1", "col2", "col3")))

mat
#      col1 col2 col3
# row1    1    3    5
# row2    2    4    6

mat[i,j] 是矩陣 mat 的 tihuan 第 6 行 j-th 的元素。例如,2i 值和 1j 值給出了矩陣的第二行和第一列中的數字。省略 ij 將返回該維度中的所有值。

mat[ , 3]
## row1 row2 
##    5    6 

mat[1, ]
# col1 col2 col3 
#    1    3    5 

當矩陣具有行名或列名(不需要)時,這些可用於子集化:

mat[ , 'col1']
# row1 row2 
#    1    2 

預設情況下,如果可能,將簡化子集的結果。如果子集僅具有一個維度,如上面的示例中那樣,結果將是一維向量而不是二維矩陣。可以使用 [drop = FALSE 引數覆蓋此預設值:

## This selects the first row as a vector
class(mat[1, ])
# [1] "integer"

## Whereas this selects the first row as a 1x3 matrix:
class(mat[1, , drop = F])
# [1] "matrix"

當然,如果選擇本身有兩個維度,則不能刪除維度:

mat[1:2, 2:3]  ## A 2x2 matrix
#      col2 col3
# row1    3    5
# row2    4    6

按位置選擇單個矩陣條目

也可以使用 Nx2 矩陣從矩陣中選擇 N 個單獨的元素(如座標系如何工作)。如果你想在向量中提取 (1st row, 1st column), (1st row, 3rd column), (2nd row, 3rd column), (2nd row, 1st column) 中矩陣的條目,可以通過建立一個帶有這些座標的索引矩陣並使用它來對矩陣進行子集來輕鬆完成:

mat
#      col1 col2 col3
# row1    1    3    5
# row2    2    4    6

ind = rbind(c(1, 1), c(1, 3), c(2, 3), c(2, 1))
ind
#      [,1] [,2]
# [1,]    1    1
# [2,]    1    3
# [3,]    2    3
# [4,]    2    1

mat[ind]
# [1] 1 5 6 2

在上面的例子中,ind 矩陣的第 1 列是指 mat 中的行,ind 的第 2 列是指 mat 中的列。