Выберите элемент из каждой строки матрицы в R

Вопрос такой же, как здесь, но в 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))), это работает. Но все же я хотел бы знать, есть ли более векторизованный способ без списков.


person Victor Proon    schedule 11.03.2012    source источник
comment
Используйте mapply, составив список векторов: as.list(as.data.frame(a))   -  person Ari B. Friedman    schedule 11.03.2012
comment
Это помогает, за исключением строк, которые вы должны сделать as.list(as.data.frame(t(a))), спасибо!   -  person Victor Proon    schedule 11.03.2012


Ответы (1)


Я не уверен на 100%, что понимаю ваш вопрос, но похоже, что это может быть близко?

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

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

> a[i]   
person Seth    schedule 11.03.2012