У меня есть X
, трехмерный массив в R. Я хочу взять вектор индексов indx
(длина равна dim(X)[1]
) и сформировать матрицу, где первая строка является первой строкой X[ , , indx[1]]
, вторая строка - это вторая строка X[ , , indx[2]]
и т. Д.
Например, у меня есть:
R> X <- array(1:18, dim = c(3, 2, 3))
R> X
, , 1
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
, , 2
[,1] [,2]
[1,] 7 10
[2,] 8 11
[3,] 9 12
, , 3
[,1] [,2]
[1,] 13 16
[2,] 14 17
[3,] 15 18
R> indx <- c(2, 3, 1)
Мой желаемый вывод
R> rbind(X[1, , 2], X[2, , 3], X[3, , 1])
[,1] [,2]
[1,] 7 10
[2,] 14 17
[3,] 3 6
На данный момент я использую не элегантный (и медленный) sapply(1:dim(X)[2], function(x) X[cbind(1:3, x, indx)])
.Есть ли способ сделать это с помощью встроенных функций индексации?Мне не повезло экспериментировать с методами матричного индексирования, описанными в ?Extract
, но я могу просто ошибиться.