-----Original Message-----
From: bgunter
Sent: Friday, May 06, 2005 12:49 PM
To: davidr at rhotrading.com; r-help at stat.math.ethz.ch
Subject: RE: [R] Choices from a matrix
If I understand you correctly, here's one way based on expand.grid().
I is just an index set, and so all you really need to do is
generate your 2^k rows from the part of the matrix you're
using in the right places via replacement:
e.g. newX<-matrix(0, ncol=ncol(X),nrow=2^length(I))
newX[,I]<-expand.grid(as.list(as.data.frame(X[,I])))
N.B. I tried to do the this without the explicit as.list()
cast, but got an error message. I would have thought that
expand.grid should have recognized that a data.frame IS a
list without the cast.
-- Bert Gunter
Genentech Non-Clinical Statistics
South San Francisco, CA
"The business of the statistician is to catalyze the
scientific learning process." - George E. P. Box
-----Original Message-----
From: r-help-bounces at stat.math.ethz.ch
[mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of
davidr at rhotrading.com
Sent: Friday, May 06, 2005 12:06 PM
To: r-help at stat.math.ethz.ch
Subject: [R] Choices from a matrix
Could someone please suggest a more clever solution to the
following problem than my loop below?
Given X a 2xN matrix X, and I a k-subset of N,
Generate the (2^k)xN matrix Y with columns not in I all zero
and the other columns with all choices of an entry from the
first or second row of X.
For example, with
X <- matrix(1:8, nrow=2)
I <- c(1,3)
X is
1 3 5 7
2 4 6 8
and Y should be
1 0 5 0
2 0 5 0
1 0 6 0
2 0 6 0
The order of the rows is unimportant.
---
I solved this using a loop over the rows of Y after forming
some preliminary matrices. I think it could be improved.
N <- NCOL(X)
k <- length(I)
G <- as.matrix(expand.grid(rep(list(c(1,2)),k)))
Y <- matrix(0,nc=N,nr=NROW(G))
for(i in 1:NROW(G)){
ind <- rep(1,N)
ind[I] <- G[i,]
Y[i,] <- X[array(c(ind,1:N),dim=c(N,2))]
}
Y[,-I] <- 0
David L. Reiner
??
Rho Trading
440 S. LaSalle St -- Suite 620
Chicago?? IL?? 60605
??
312-362-4963 (voice)
312-362-4941 (fax)
??