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