[R] elegant matrix creation

Arne Henningsen ahenningsen at email.uni-kiel.de
Tue Jul 12 13:53:06 CEST 2005


Maybe not elegant, but I guess this function does what you want:

f <- function( x ) {
   n <- length( x ) + 1
   m <- matrix( 0, nrow = n, ncol = n )
   diag(m) <- 1
   for( j in 1:( n-1 ) ) {
      for( i in ( j+1 ):n ) {
         m[ i, j ] <- prod( x[ j:(i-1) ] )
      }
   }
   return( m )
}

Best wishes,
Arne

On Tuesday 12 July 2005 13:11, Robin Hankin wrote:
> 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 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

-- 
Arne Henningsen
Department of Agricultural Economics
University of Kiel
Olshausenstr. 40
D-24098 Kiel (Germany)
Tel: +49-431-880 4445
Fax: +49-431-880 1397
ahenningsen at agric-econ.uni-kiel.de
http://www.uni-kiel.de/agrarpol/ahenningsen/




More information about the R-help mailing list