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,
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]]
At Fri, 4 Jan 2013 17:17:40 +0530, 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 matrixThis will redimension Mat1 and fill in NAs as you want: Mat3 = matrix(c(t(Mat1), rep(NA, (nrow(Mat2) - nrow(Mat1)) * ncol(Mat1))), byrow=TRUE, ncol=ncol(Mat1)) Then you can do Mat2 + Mat3.> Also note that, here I gave the example of addition, however, this can > be any user defined function.You can use mapply for this: mapply(function (a, b) { a + b }, Mat2, Mat3) Neal