RE: [R] elegant matrix creation

From: Gabor Grothendieck <>
Date: Thu 29 Jul 2004 - 02:27:10 EST

[Sorry if this gets posted twice but I am having more gmane posting problems.]

Not sure if this qualifies as elegant or not but it does (1) bring all three matrices under a single scheme, (2) reduce the number of numbers from 81 to 18 per matrix, (3) requires only a single one line utility function, (4) is simple and (5) gives some minimal insight into the patterns.

The key thing to note is that each row of each matrix is a cyclic shift of the first row of that matrix.

Define a shift function which shifts its vector argument v by shift positions to the left creating a one row matrix. If shift is a vector it creates a matrix with one row per shift.

shiftL <- function(v, shift)

        outer(shift,seq(along=v)-1, function(i,j)v[(i+j)%%length(v)+1])

jj1a <- shiftL(c(1,1,1,2,2,2,3,3,3),c(0,3,6,0,3,6,0,3,6))
jj2a <- shiftL(c(1,2,1,3,1,3,2,3,2),c(0,6,3,0,6,3,0,6,3))
jj3a <- shiftL(c(1,1,1,2,2,2,3,3,3),c(0,4,8,3,7,2,6,1,5))

# or finding expressions for the two args in each case:

jj1b <- shiftL( rep(1:3,c(3,3,3)), rep(c(0,3,6),3) )
jj2b <- shiftL( c(shiftL(c(1,3,2),c(0,2,0))), rep(c(0,6,3),3) )
jj3b <- shiftL( rep(1:3,c(3,3,3)), seq(0,32,4) %% 9 )

______________________________________________ mailing list PLEASE do read the posting guide! Received on Thu Jul 29 02:52:15 2004

This archive was generated by hypermail 2.1.8 : Wed 03 Nov 2004 - 22:55:19 EST