[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