this looks similar: do.call(expand.grid,split(t(replicate(3,c(0,1,NA))),1:3))
Adrian DUSA a écrit : >Dear R-helpers, > >I'm trying to develop a function which specifies all possible expressions that >can be formed using a certain number of variables. For example, with three >variables A, B and C we can have >- presence/absence of A; B and C >- presence/absence of combinations of two of them >- presence/absence of all three > > A B C >1 0 >2 1 >3 0 >4 1 >5 0 >6 1 >7 0 0 >8 0 1 >9 1 0 >10 1 1 >11 0 0 >12 0 1 >13 1 0 >14 1 1 >15 0 0 >16 0 1 >17 1 0 >18 1 1 >19 0 0 0 >20 0 0 1 >21 0 1 0 >22 0 1 1 >23 1 0 0 >24 1 0 1 >25 1 1 0 >26 1 1 1 > >My function (pasted below) while producing the desired result, still needs >some more vectorizing; in particular, I can't figure out how could one modify >the element of a matrix using apply on a different matrix... >To produce the above outcome, I use: > > >>all.expr(LETTERS[1:3]) >> >> > >"all.expr" <- >function(column.names) { > ncolumns <- length(column.names) > return.matrix <- matrix(NA, nrow=(3^ncolumns - 1), ncol=ncolumns) > colnames(return.matrix) <- column.names > rownames(return.matrix) <- 1:nrow(return.matrix) > start.row <- 1 > all.combn <- sapply(1:ncolumns, function(idx) { > as.matrix(combn(ncolumns, idx)) > }, simplify=FALSE) > for (j in 1:length(all.combn)) { > idk <- all.combn[[j]] > tt <- matrix(NA, ncol=nrow(idk), nrow=2^nrow(idk)) > for (i in 1:nrow(idk)) { > tt[,i] <- c(rep(0, 2^(nrow(idk) - i)), rep(1, 2^(nrow(idk) - i))) > } > > ## This is _slow_ part, where I don't know how to vectorize: > for (k in 1:ncol(idk)) { > end.row <- start.row + nrow(tt) - 1 > return.matrix[start.row:end.row, idk[ , k]] <- tt > start.row <- end.row + 1 > } > ## How can one modify "return.matrix" using apply on "idk"? > } > return.matrix[is.na(return.matrix)] <- "" > return.matrix > } >} > >Thank you in advance, >Adrian > > > ______________________________________________ R-help@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