It would be much easier if you started out with a 3-dimensional array. A large part of what makes R a good environment is that it gives you the flexibility to have data structures that match how you think about the data.
h0arr <- h0m dim(h0arr) <- c(2, 2, ncol(h0m))
Then you can write a function to do the entire task that you want:
tseqeigen <- function(x, times=1:(nm-1)) {
dx <- dim(x)
if(length(dx) != 3) stop("x must be 3-dimensional array")
if(dx[1] != dx[2]) stop("first two dimensions of x must be equal")
nm <- dx[3]
ans <- array(NA, c(length(times), dx[1]))
for(i in seq(along=times)) {
this.t <- times[i]
this.mm <- x[,, this.t] %*% x[,, this.t + 1]
ans[i,] <- eigen(this.mm)$values
}
ans
}This could then be used like:
tseqeigen(h0arr)
or
tseqeigen(h0arr, 1:4)
Enhancements to the function might include giving it a better name, and dealing with dimnames.
There is some material in S Poetry on dealing with higher dimensional arrays.
Patrick Burns
Burns Statistics [EMAIL PROTECTED] +44 (0)20 8525 0696 http://www.burns-stat.com (home of S Poetry and "A Guide for the Unwilling S User")
Ivan Kautter wrote:
List serv subscribers,
I am wondering if there is an efficient means of doing recursive matrix multiplication in R. My data resides in a 4 X 2541 matrix from which I need to extract 2541 2X2 matrices based on each row. If I attempt something like this:
function(AO)
{A<-AO
{for(t in 1:4)
A[t+1]<-matrix(h0m[t,1:4],nrow=2,ncol=2,byrow=FALSE)%*%matrix(h0m[t+1,1:4],nrow=2,ncol=2,byrow=FALSE)
} }
I get this type of error:
1: number of items to replace is not a multiple of replacement length 2: number of items to replace is not a multiple of replacement length 3: number of items to replace is not a multiple of replacement length 4: number of items to replace is not a multiple of replacement length
I believe I understand the error here in that I am attempting to add more elements to an object that is only a 2x2 matrix. So is there some way to just update the value of the matrix recursively? If you are asking yourself why I am bothering to do this if I mean to multiple only 4 matrices, I actually intend to multiple up to all 2541 of them, which seems no small task. Ultimately, I would like to define the time period over which I am multiplyig these essentially time-dependent matrices and obtain the eigenvalues of the final matrix product.
If anyone can offer any assistance, I would greatly appreciate it. Thanks.
Ivan Kautter
_________________________________________________________________
FREE pop-up blocking with the new MSN Toolbar get it now! http://clk.atdmt.com/AVE/go/onm00200415ave/direct/01/
______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
