我有一个矩阵 A 看起来像
A = matrix(1:9,3,3)
A
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
Run Code Online (Sandbox Code Playgroud)
以及我感兴趣的元素索引矩阵。第 1 列包含行索引,第 2 列包含列索引:
v = matrix(c(1, 3, 2, 2, 2, 3), nrow = 3, ncol = 2)
v
[,1] [,2]
[1,] 1 2
[2,] 3 2
[3,] 2 3
Run Code Online (Sandbox Code Playgroud)
我想使用“v”中的行和列索引从“A”中提取数字;索引对应于数字 4 ( A[1, 2])、6 ( A[3, 2]) 和 8。
如何在不使用循环的情况下直接从“A”中提取这些数字?
当我使用
A[v[ , 1], v[ , 2]]
Run Code Online (Sandbox Code Playgroud)
我得到
[,1] [,2] [,3]
[1,] 4 4 7
[2,] 6 6 9
[3,] 5 5 8
Run Code Online (Sandbox Code Playgroud)
因为 R 采用 'v' 的第一列和第二列的所有组合。
我想要的是一个直接给我 4、6、8 的表达式。
我可以只采用对角线元素,但必须有更简单的方法。
从?"[",您会发现以下内容:
当通过 [ 单个参数索引数组时, i 可以是一个矩阵,其列数与 x 的维数一样多;结果是一个向量,其元素对应于 i 的每一行中的索引集。
后来……
第三种形式的索引是通过每个维度一列的数字矩阵:然后索引矩阵的每一行选择数组的一个元素,结果是一个向量。索引矩阵中不允许使用负索引。允许 NA 和零值:包含零的索引矩阵的行被忽略,而包含 NA 的行在结果中产生 NA。
因此,您正在寻找的只是:
A[v]
Run Code Online (Sandbox Code Playgroud)