Hello Rui/Jorge, This is shorter, and probably needs less memory for large matrices as you create an other copy by defining nas:
matrixOp <- function(m1, m2, op=`+`) { rows <- min(nrow(m1), nrow(m2)) cols <- ncol(m1) op(m1[1:rows, 1:cols], m2[1:rows, 1:cols]) } Best, mem On 4 January 2013 14:08, Rui Barradas <ruipbarra...@sapo.pt> wrote: > Hello, > > Using part of your code, it's possible to do without Reduce, have foo (fun, > below) do the job. > > fun <- function(x, y, FUN = `+`){ > if(nrow(x) < nrow(y)){ > nas <- matrix(NA, ncol = ncol(x), nrow = nrow(y) - nrow(x)) > x <- rbind(x, nas) > }else{ > nas <- matrix(NA, ncol = ncol(y), nrow = nrow(x) - nrow(y)) > y <- rbind(y, nas) > } > FUN(x, y) > } > > fun(Mat1, Mat2) > fun(Mat1, Mat2, `*`) # Note the back quotes > > > Hope this helps, > > Rui Barradas > Em 04-01-2013 12:06, Jorge I Velez escreveu: > >> Dear Christofer, >> >> You can try the following: >> >> # proccess the matrices >> foo <- function(m1, m2){ >> if(ncol(m1) != ncol(m2)) stop('number of columns should be equal') >> if(nrow(m1) < nrow(m2)){ >> nas <- matrix(NA, ncol = ncol(m1), nrow = nrow(m2) - nrow(m1)) >> m1 <- rbind(m1, nas) >> } >> else{ >> nas <- matrix(NA, ncol = ncol(m1), nrow = nrow(m1) - nrow(m2)) >> m2 <- rbind(m2, nas) >> } >> list(m1, m2) >> } >> >> # process >> r <- foo(Mat1, Mat2) >> >> # basic operations >> Reduce("+", r) >> Reduce("*", r) >> Reduce("/", r) >> Reduce("-", r) >> >> HTH, >> Jorge.- >> >> >> On Fri, Jan 4, 2013 at 10:47 PM, Christofer Bogaso <> wrote: >> >>> Hello again, >>> >>> Let say I have 2 matrices which equal number of columns but different >>> number of rows like: >>> >>> Mat1 <- matrix(1:20, 4, 5) >>> Mat2 <- matrix(1:25, 5, 5) >>> >>> Now for each column 1-to-5 I need to fetch the corresponding columns >>> of these 2 matrices and add the corresponding elements (ignoring NA >>> values if any). Therefore for the 1st column I need to do: >>> >>> (1+1), (2+2),...,(4+4), (NA+5) >>> >>> and so on >>> >>> And the resulting numbers will be stored in some other matrix >>> >>> Also note that, here I gave the example of addition, however, this can >>> be any user defined function. >>> >>> Is there any R way to do that, without using any for-loop? >>> >>> Thanks and regards, >>> >>> ______________________________________________ >>> R-help@r-project.org mailing list >>> https://stat.ethz.ch/mailman/listinfo/r-help >>> PLEASE do read the posting guide >>> http://www.R-project.org/posting-guide.html >>> and provide commented, minimal, self-contained, reproducible code. >>> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide >> http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. > > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.