Добавьте срез данных (то есть матрицу n-на-n) к многомерной матрице в R - PullRequest
3 голосов
/ 16 июня 2011

Согласно заголовку, есть ли способ добавить срез данных, который представляет собой матрицу n-на-n, к существующей N-мерной матрице в R?

Например, у меня есть следующее:

one <- array(1, dim = c(3, 3))
two <- array(2, dim = c(3, 3))
three <- array(3, dim = c(6, 6))

которую я хотел бы затем преобразовать в матрицу 6x6x3, с которой я мог бы работать, которая выглядела бы следующим образом:

[[1]]
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    1    1   NA   NA   NA
[2,]    1    1    1   NA   NA   NA
[3,]    1    1    1   NA   NA   NA
[4,]   NA   NA   NA   NA   NA   NA
[5,]   NA   NA   NA   NA   NA   NA
[6,]   NA   NA   NA   NA   NA   NA

[[2]]
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    2    2    2   NA   NA   NA
[2,]    2    2    2   NA   NA   NA
[3,]    2    2    2   NA   NA   NA
[4,]   NA   NA   NA   NA   NA   NA
[5,]   NA   NA   NA   NA   NA   NA
[6,]   NA   NA   NA   NA   NA   NA

[[3]]
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    3    3    3    3    3    3
[2,]    3    3    3    3    3    3
[3,]    3    3    3    3    3    3
[4,]    3    3    3    3    3    3
[5,]    3    3    3    3    3    3
[6,]    3    3    3    3    3    3

Я знаю, как это сделатьчерез мой собственный код, так что меня больше интересует, есть ли существующая библиотечная функция, которая поддерживает это.

1 Ответ

6 голосов
/ 16 июня 2011

В дополнение к abind, я думаю, вам нужно выяснить максимальный размер ваших матриц и создать матрицы, дополненные соответствующим количеством NA?

padmat <- function(X,m,n) {
  Y <- matrix(NA,m,n)
  Y[1:nrow(X),1:ncol(X)] <- X
  Y
}
one <- array(1, dim = c(3, 3))
two <- array(2, dim = c(3, 3))
three <- array(3, dim = c(6, 6))

mlist <- list(one,two,three)

maxrows <- max(sapply(mlist,nrow))
maxcols <- max(sapply(mlist,ncol))

mlist2 <- lapply(mlist,padmat,m=maxrows,n=maxcols)

library(abind)
abind(mlist2,along=3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...