使用矩阵中的行和列索引从矩阵中提取值

fuj*_*015 7 r matrix

我有一个矩阵 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 的表达式。

我可以只采用对角线元素,但必须有更简单的方法。

A5C*_*2T1 8

从?"[",您会发现以下内容:

当通过 [ 单个参数索引数组时, i 可以是一个矩阵,其列数与 x 的维数一样多;结果是一个向量,其元素对应于 i 的每一行中的索引集。

后来……

第三种形式的索引是通过每个维度一列的数字矩阵:然后索引矩阵的每一行选择数组的一个元素,结果是一个向量。索引矩阵中不允许使用负索引。允许 NA 和零值:包含零的索引矩阵的行被忽略,而包含 NA 的行在结果中产生 NA。

因此,您正在寻找的只是:

A[v]
Run Code Online (Sandbox Code Playgroud)