Showing posts with label combmat(). Show all posts
Showing posts with label combmat(). Show all posts
Sunday, September 20, 2015
A Function for Adding up Matrices with Different Dimensions
I couldn't find a function that can handle matrices with different dimensions and thus coded one myself. It can sum up matrices and also copes with matrices with different dimensions.
It is very likely that someone else may come to a more effective approach - I'd be happy to here about improvements or if there is a package/function doing the same...
Read more »
# File: combmat.R
# Purpose: add up matrices with different dimensions
# Input: a list of 2-dimensional matrices
# Output: a combined matrix
# Author: Kay Cichini
# Date: Nov. 23th 2011
combmat <- function(m_l = list(NA)){
n_m <- length(m_l) # no. of matrices used
rownames_l <- lapply(m_l, rownames) # list of rownames
colnames_l <- lapply(m_l, colnames) # list of colnames
rownames_new <- unique(unlist(rownames_l)) # new, general rownames
colnames_new <- unique(unlist(colnames_l)) # new, general colnames
dimnames_new = list(rownames_new, colnames_new)
m_new <- matrix(nrow = length(rownames_new),
ncol = length(colnames_new),
data = 0,
dimnames = dimnames_new)
m_interm_arr <- # array of intermediate
array(m_new, dim = c(length(rownames_new), # matrices with same no. of
length(colnames_new), n_m), # dimensions as elements in
dimnames = dimnames_new) # list of input matrices
# take i-th element in list of imput matrices and add
# its values according to the appropiate row and col indexes
# in i-th dimension (i-th matrix) within array:
for (i in 1:n_m) {
m_interm_arr[,,i][rownames_l[[i]], colnames_l[[i]]] <- m_l[[i]]
}
return(apply(m_interm_arr, c(1,2), sum))
}
# Example:
print(m1 <- matrix(sample(1:40), 4, 10, dimnames = list(1:4,1:10)))
print(m2 <- matrix(sample(1:40), 10, 4, dimnames = list(1:10,1:4)))
combmat(m_l = list(m1, m2))
It is very likely that someone else may come to a more effective approach - I'd be happy to here about improvements or if there is a package/function doing the same...
Subscribe to:
Posts (Atom)