Java Mailing List Archive

http://www.r-help.com/

Home » Home (12/2007) » R Help for Statistical Computing »

Re: [R] elegant matrix creation

Uwe Ligges

2005-07-12

Replies:

Robin Hankin wrote:


What about

foo <- function(a){
  n <- length(a)
  X <- diag(n+1)
  X[lower.tri(X)] <- unlist(lapply(seq(n),
     function(x) cumprod(c(1, a)[-seq(x)])))
  X
}

foo(c(10,7,2))


Uwe Ligges



> Hi
>
> I want to write a little function that takes a vector of arbitrary
> length "n" and returns a matrix of size n+1 by n+1.
>
> I can't easily describe it, but the following function that works for
> n=3 should convey what I'm trying to do:
>
>
> f <- function(x){
>   matrix(c(
>   1       ,  0    ,  0 , 0,
> x[1]       ,  1    ,  0 , 0,
> x[1]*x[2]   , x[2]   ,  1 , 0,
> x[1]*x[2]*x[3], x[2]*x[3], x[3], 1
> ),
> 4,4,      byrow=T)
> }
>
> f(c(10,7,2))
>     [,1] [,2] [,3] [,4]
> [1,]   1   0   0   0
> [2,]  10   1   0   0
> [3,]  70   7   1   0
> [4,] 140  14   2   1
> >
>
>
> As one goes down column "i", the entries get multiplied by successive
> elements of x, starting with x[i], after the first "1"
>
> As one goes along a row, one takes a product of the tail end of x,
> until the zeroes kick in.
>
>
> Am I missing some clever solution?
>
>
>
> --
> Robin Hankin
> Uncertainty Analyst
> National Oceanography Centre, Southampton
> European Way, Southampton SO14 3ZH, UK
>  tel 023-8059-7743
>
> ______________________________________________
> R-help@(protected)
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

______________________________________________
R-help@(protected)
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
©2008 r-help.com - Jax Systems, LLC, U.S.A.