如何通过用一对向量索引矩阵来获取向量?

How to get a vector by indexing a matrix with pair of vectors?

给定两个向量,它们是索引列表的组成部分,我如何通过它们成对索引矩阵?如果我按原样使用它们,我会得到笛卡尔积(与其他语言中的花式索引一致):

> x
           [,1]      [,2]        [,3]
[1,]  0.4636395 0.7937225  0.81670694
[2,] -1.0591770 0.7515119  1.31597748
[3,] -0.5215888 1.2026196 -0.03518676
> x[c(1,2), c(1, 1)]
           [,1]       [,2]
[1,]  0.4636395  0.4636395
[2,] -1.0591770 -1.0591770

虽然我很想

> c(x[1, 1], x[2, 1])
[1]  0.4636395 -1.0591770

在 Julia 中,我可以写得相当简洁:

julia> x[CartesianIndex.([1, 2], [1, 1])] # not the same x here, but still 3x3
2-element Array{Float64,1}:
 0.5815007881748451
 0.6563715338911154

在 Matlab 中,有人告诉我这相当于手动转换为线性索引:

x(sub2ind(A, [1, 2], [1, 1]))

我如何在 R 中做到这一点?

(这实际上是 this answer 的一个不同问题,但我真的无法通过搜索轻松找到解决方案。特别是没有重复,尽管我认为它一定是一个常见问题。那个“R”不是一个很好的 googleable 关键字没有帮助。)

“索引”在 R 中通常称为 "subsetting"。在这种情况下,您必须按 矩阵 进行子集化。通过 cbind 将向量组合在一起最容易构建:

> cbind(c(1,2), c(1, 1))
     [,1] [,2]
[1,]    1    1
[2,]    2    1
> x[cbind(c(1,2), c(1, 1))]
[1]  0.4636395 -1.0591770