矩阵索引符号语法
Matrix indexing notation syntax
让我们创建矩阵 m。
m <- matrix(1:9, 3,3, T); m
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
m[3,1] # 7
m[3][1] # 7
为什么第二个索引符号有效?这两种符号之间有区别吗?使用安全吗?
但序列的行为不同:
m[1:2, 1:2] # works as expected, return matrix
m[1:2][1:2] # return vector 1 4, why?
A matrix
是具有 dim
属性的 vector
。通过执行 m[3]
,它只 returns 第三个元素。如果我们想使用链式提取,则在 ,
之后提取列索引为空白的行(drop = FALSE
- 如果我们想避免将矩阵强制转换为向量)和 select第一列的第一个元素
m[3,, drop = FALSE][1]
#[1] 7
在 OP 的第一个选项中,它使用具有 3, 1
的行索引和列索引,其中 selects 元素基于两个索引
在更新的示例中,OP 将行索引指定为前 2 行,将列指定为前 2 列。所以,它 returns 一个省略了第 3 行和第 3 列的矩阵
m[1:2, 1:2]
# [,1] [,2]
#[1,] 1 2
#[2,] 4 5
但是,在第二种情况下
m[1:2]
#[1] 1 4
提取前两个元素
同样,如果我们这样做
m[1:5]
#[1] 1 4 7 2 5
是按列顺序排列的前五个元素
因此,
m[1:2][1:2]
returns 只有 1, 4 因为从第一个 Extract 开始,它只提取 1 和 4。然后,第二个 extract 基于该子集,它也有 2 个元素。如果我们增加索引,这些位置将不可用并由 NA
填充
m[1:2][1:4]
#[1] 1 4 NA NA
元素索引作用于vector
c(m)
#[1] 1 4 7 2 5 8 3 6 9
其中前两个元素是 1 和 4
让我们创建矩阵 m。
m <- matrix(1:9, 3,3, T); m
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
m[3,1] # 7
m[3][1] # 7
为什么第二个索引符号有效?这两种符号之间有区别吗?使用安全吗?
但序列的行为不同:
m[1:2, 1:2] # works as expected, return matrix
m[1:2][1:2] # return vector 1 4, why?
A matrix
是具有 dim
属性的 vector
。通过执行 m[3]
,它只 returns 第三个元素。如果我们想使用链式提取,则在 ,
之后提取列索引为空白的行(drop = FALSE
- 如果我们想避免将矩阵强制转换为向量)和 select第一列的第一个元素
m[3,, drop = FALSE][1]
#[1] 7
在 OP 的第一个选项中,它使用具有 3, 1
的行索引和列索引,其中 selects 元素基于两个索引
在更新的示例中,OP 将行索引指定为前 2 行,将列指定为前 2 列。所以,它 returns 一个省略了第 3 行和第 3 列的矩阵
m[1:2, 1:2]
# [,1] [,2]
#[1,] 1 2
#[2,] 4 5
但是,在第二种情况下
m[1:2]
#[1] 1 4
提取前两个元素
同样,如果我们这样做
m[1:5]
#[1] 1 4 7 2 5
是按列顺序排列的前五个元素
因此,
m[1:2][1:2]
returns 只有 1, 4 因为从第一个 Extract 开始,它只提取 1 和 4。然后,第二个 extract 基于该子集,它也有 2 个元素。如果我们增加索引,这些位置将不可用并由 NA
填充m[1:2][1:4]
#[1] 1 4 NA NA
元素索引作用于vector
c(m)
#[1] 1 4 7 2 5 8 3 6 9
其中前两个元素是 1 和 4