从R中矩阵的每一行中选择一个元素

时间:2012-03-11 14:25:52

标签: r vectorization

问题与here相同,但在R中我有一个矩阵和一个向量

length(vec) == nrow(mat)

我如何获得这样的载体

v[i] == mat[v[i],i]

我尝试使用逻辑矩阵来实现这一目标:

>a = matrix(runif(12),4,3)
a
          [,1]      [,2]      [,3]
[1,] 0.6077585 0.5354680 0.2802681
[2,] 0.2596180 0.6358106 0.9336301
[3,] 0.5317069 0.4981082 0.8668405
[4,] 0.6150885 0.5164009 0.5797668
> sel = col(a) == c(1,3,2,1)
> sel
      [,1]  [,2]  [,3]
[1,]  TRUE FALSE FALSE
[2,] FALSE FALSE  TRUE
[3,] FALSE  TRUE FALSE
[4,]  TRUE FALSE FALSE
> a[sel]
[1] 0.6077585 0.6150885 0.4981082 0.9336301

它选择了正确的元素,但却搞砸了订单。我还想过使用mapply,但我不知道如何让它遍历行,就像在apply中一样。

upd:@ gsk3建议使用as.list(as.data.frame(t(a)))这个有效。但我仍然想知道是否有更多的矢量化方式,没有列表。

1 个答案:

答案 0 :(得分:4)

我不是百分百肯定我理解你的问题,但似乎这可能很接近?

> b=c(1,3,2,1)

> i=cbind(1:nrow(a),b)

> a[i]