Эффективная перестановка длинной матрицы в матрицу, состоящую из связанных с столбцами подблоков (оригинала) в R - PullRequest
0 голосов
/ 26 июня 2019

"У меня очень длинная матрица, размером 30 ^ 5 x 3 записи. Я в основном состоит из субблоков из 10.000 30 x 3 матриц, расположенных друг над другом. Я хочу эффективно" связать "их рядом с одним другой (без циклических конструкций), приводящий к матрице 30 x 30 ^ 4.

Простое изменение размеров матрицы не работает, так как R заполняет новую матрицу для каждого столбца.

Я уверен, что есть очень компактный, сверхэффективный способ сделать это, и я хлопну себя по лбу, как только вы объясните мне очевидное решение.

Спасибо! "

«Простое изменение размеров матрицы не работает, поскольку R заполняет новую матрицу для каждого столбца.»

```R
test <- matrix(c(1:18), 6, 3, byrow = FALSE)

>test   
 [,1] [,2] [,3]
[1,]    1    7   13
[2,]    2    8   14
[3,]    3    9   15
[4,]    4   10   16
[5,]    5   11   17
[6,]    6   12   18

dim(test) <- c(3,6)

>test
[,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    4    7   10   13   16
[2,]    2    5    8   11   14   17
[3,]    3    6    9   12   15   18
```

Вывод, который я ищу: [,1] [,2] [,3] [,4] [,5] [,6] [1,] 1 7 13 4 10 16 [2,] 2 8 14 5 11 17 [3,] 3 9 15 6 12 18

1 Ответ

1 голос
/ 26 июня 2019

Мы можем создать группирующую переменную для разделения последовательности строк, подмножества матрицы и затем cbind

do.call(cbind, lapply(split(seq_len(nrow(test)), 
       as.integer(gl(nrow(test), 3, nrow(test)))), function(i) test[i,]))
#      [,1] [,2] [,3] [,4] [,5] [,6]
#[1,]    1    7   13    4   10   16
#[2,]    2    8   14    5   11   17
#[3,]    3    9   15    6   12   18
...