[R] Working with Matrix

Suzen, Mehmet msuzen at gmail.com
Fri Jan 4 16:39:36 CET 2013


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 <ruipbarradas at 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 at 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 at 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 at 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.




More information about the R-help mailing list