If I have 4 vectors (a, b, c, and d) each of length 1000, how do I then create 1000 two by two matrices from these vectors, such that: myMatrix[i] = matrix(c(a[i],b[i],c[i],d[i]),2) Then I'd like to create a single vector containing the largest eigenvalues of each matrix? (Sorry I am quite new to R) Many thanks, James _________________________________________________________________ [[elided Hotmail spam]]
James Rudge wrote:> If I have 4 vectors (a, b, c, and d) each of length 1000, how do I then create 1000 two by two matrices from these vectors, such that: > > myMatrix[i] = matrix(c(a[i],b[i],c[i],d[i]),2) > > Then I'd like to create a single vector containing the largest eigenvalues of each matrix? > > (Sorry I am quite new to R) > Many thanks, > JamesSomething like this might get you started: ## use mapply to construct the matrices, returns list of matrices m1 <- mapply(function(...) matrix(as.numeric(list(...)), nrow = 2, byrow = TRUE), a, b, c, d, SIMPLIFY = FALSE) ## apply the eigen function to the list m2 <- lapply(m1, eigen, only.values = TRUE) ## the largest eigenvalue is in the first slot sapply(sapply(m2, "[", "values"), "[", 1) Where a, b, c, d are your vectors. I tried this on a small example, with vectors of length 10, seemed to work. In general, watch for naming objects 'c', as that is the name of an important built-in R function. The apply functions can help a lot in cases like these, see their respective help pages. Hope this helps, Erik> > _________________________________________________________________ > [[elided Hotmail spam]] > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
I think this approximates what you want: a1 <- 1:10 a2 <- a1 + 100 a3 <- a1 + 200 a4 <- a1 + 300 arr <- rbind(a1, a2, a3, a4) dim(arr) <- c(2, 2, 10) apply(arr, 3, function(x) eigen(x)$values[2]) Patrick Burns patrick at burns-stat.com +44 (0)20 8525 0696 http://www.burns-stat.com (home of S Poetry and "A Guide for the Unwilling S User") James Rudge wrote:> If I have 4 vectors (a, b, c, and d) each of length 1000, how do I then create 1000 two by two matrices from these vectors, such that: > > myMatrix[i] = matrix(c(a[i],b[i],c[i],d[i]),2) > > Then I'd like to create a single vector containing the largest eigenvalues of each matrix? > > (Sorry I am quite new to R) > Many thanks, > James > > _________________________________________________________________ > [[elided Hotmail spam]] > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > > >