[R] matrix assembly

Dimitris Rizopoulos dimitris.rizopoulos at med.kuleuven.be
Wed Nov 16 13:17:51 CET 2005


a crude approach is the following:

f <- function(x){
    k <- x[1]
    l <- x[2]
    matrix(k + l, k , l)
}
a <- c(1, 3)
b <- c(2, 4, 5)
combs <- expand.grid(a, b)

do.call("cbind", lapply(split(combs, combs$Var2), function(x) 
do.call("rbind", apply(x, 1, f))))


I hope it helps.

Best,
Dimitris

----
Dimitris Rizopoulos
Ph.D. Student
Biostatistical Centre
School of Public Health
Catholic University of Leuven

Address: Kapucijnenvoer 35, Leuven, Belgium
Tel: +32/(0)16/336899
Fax: +32/(0)16/337015
Web: http://www.med.kuleuven.be/biostat/
     http://www.student.kuleuven.be/~m0390867/dimitris.htm


----- Original Message ----- 
From: "Robin Hankin" <r.hankin at noc.soton.ac.uk>
To: "RHelp" <r-help at stat.math.ethz.ch>
Sent: Wednesday, November 16, 2005 11:10 AM
Subject: [R] matrix assembly


> Hi
>
> I have a function f(k,l) which returns a matrix for integer k and l.
> I want to call f(.,.) for each combination of a supplied vector (as
> in expand.grid())
> and then I want to assemble these matrices into one big one using
> k and l to index the position of the submatrices returned by f(k,l).
>
> Toy example follows.
>
>
> f <- function(k,l){
> matrix(k+l , k , l)
> }
>
> and I want to call f() with each combination of c(1,3)
> for the first argument and c(2,4,5) for the second
> and then assemble the resulting matrices.
>
> I can do it piecemeal:
>
> a <- c(1,3)
> b <- c(2,4,5)
> expand.grid(a,b)
>   Var1 Var2
> 1    1    2
> 2    3    2
> 3    1    4
> 4    3    4
> 5    1    5
> 6    3    5
>  cbind(rbind(f(1,2),f(3,2)) , rbind(f(1,4),f(3,4)) , rbind(f(1,5),f
> (3,5)))
>      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
> [1,]    3    3    5    5    5    5    6    6    6     6     6
> [2,]    5    5    7    7    7    7    8    8    8     8     8
> [3,]    5    5    7    7    7    7    8    8    8     8     8
> [4,]    5    5    7    7    7    7    8    8    8     8     8
>
> [see how the calls to f(. , .) follow the rows of expand.grid(a,b)]
>
>
> How to do this in a nice vectorized manner?
>
>
>
> --
> Robin Hankin
> Uncertainty Analyst
> National Oceanography Centre, Southampton
> European Way, Southampton SO14 3ZH, UK
>  tel  023-8059-7743
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! 
> http://www.R-project.org/posting-guide.html
> 


Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm




More information about the R-help mailing list