2016-05-05 4 views
2

Мне нужно сделать матрицу в R, ее элементы взяты из матриц, определенных мной ранее. Например, у меня есть 4 матрицы,Сделать матрицу из подматрицы в R

w <- matrix(c(1,2,3,4),2,2) 
x <- matrix(c(5,6,7,8),2,2) 
y <- matrix(c(9,10,11,12),2,2) 
z <- matrix(c(13,14,15,16),2,2) 

Тогда новая матрица должна быть 4X4 матрицей с w является [1:2,1:2] элемента, x является [1:2,3:4] элемента, y является [3:4,1:2] элемента и z является [3:4,3:4] элемент.

Как я могу сделать это быстро?

+2

'rbind (cbind (ш, х), cbind (у , z)) 'в качестве ручной версии. – thelatemail

ответ

4

Мы можем создать array, а затем пройти через третье измерение, и rbind.

ar1 <- array(c(w, x, y,z), dim=c(2, 4,2)) 
do.call(rbind,lapply(seq(dim(ar1)[3]), function(i) ar1[,,i])) 
#  [,1] [,2] [,3] [,4] 
#[1,] 1 3 5 7 
#[2,] 2 4 6 8 
#[3,] 9 11 13 15 
#[4,] 10 12 14 16 

Или, как @thelatemail упоминается в комментариях

apply(array(c(w,x,y,z), dim=c(2,4,2)), 2, I) 

где I обозначает inhibit interpretation или использовать identity вместо I

+1

'apply (ar1,2, identity)' также получит вас там - или 'apply (array (c (w, x, y, z), dim = c (2,4,2)), 2, identity) 'все за один раз – thelatemail

+0

Что такое dim = c (2,4,2)? –

+0

@YohanesEkiApriliawan Это атрибуты измерения, которые мы указываем для 3d-массива, т.е. – akrun