Matrix rotation
Try this: # cyclically rotate a vector to the right rot <- function(x) c(x[length(x)], x[-length(x)]) # create a vector from a 2x2 matrix moving left to right along # first row and then right to left along second row m2v <- function(m) m[c(1,3,4,2)] # inverse of m2v. Note that c(1,4,2,3) equals order(c(1,3,4,2)) v2m <- function(v) matrix(v[c(1,4,2,3)],2) m <- matrix(1:4, 2, byrow = TRUE) print(mm <- m) for(i in 1:4) print(mm <- v2m(rot(m2v(mm))))
On 11/24/05, Benjamin Lloyd-Hughes <blh at cpom.ucl.ac.uk> wrote:
Ok I warned you that I'd been drinking! What I really meant was
something to go from:
[,1] [,2]
[1,] 1 2
[2,] 4 3
to
[,1] [,2]
[1,] 4 1
[2,] 3 2
to
[,1] [,2]
[1,] 3 4
[2,] 2 1
to
[,1] [,2]
[1,] 2 3
[2,] 1 4
Sorry for being a muppet, B
Begin forwarded message:
From: Benjamin Lloyd-Hughes <blh at cpom.ucl.ac.uk> Date: 24 November 2005 16:15:58 GMT To: r-help at stat.math.ethz.ch Subject: Matrix rotation Dearest All, Ok so I've had a couple of glasses of wine over lunch today... This is likely to be trivial but I'm struggling to find a more elegant way to obtain the following matrix rotations:
M <- matrix(c(1,0,0,0), ncol=2) M
[,1] [,2] [1,] 1 0 [2,] 0 0
N <- abind(M[2,],M[1,],along=2) N
[,1] [,2] [1,] 0 1 [2,] 0 0
P <- abind(N[2,],N[1,],along=2) P
[,1] [,2] [1,] 0 0 [2,] 0 1
Q <- abind(P[,2],P[,1],along=2) Q
[,1] [,2] [1,] 0 0 [2,] 1 0 And, more generally wish to rotate a n-dimensional data cube about some specified axis. Cheers, Ben
[[alternative text/enriched version deleted]]
______________________________________________ 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