У меня есть X
, трехмерный массив в R. Я хочу взять вектор индексов indx
(длина равна dim(X)[1]
) и сформировать матрицу, где первая строка является первой строка X[ , , indx[1]]
, вторая строка - вторая строка X[ , , indx[2]]
и т. д.Матрица форм из рядов в 3-мерном массиве
К примеру, у меня есть:
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
, но я могу просто ошибаться.
См. Также http://stackoverflow.com/q/3551955/210673 – Aaron