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 -- Adrian DUSA Romanian Social Data Archive 1, Schitu Magureanu Bd 050025 Bucharest sector 5 Romania Tel./Fax: +40 21 3126618 \ +40 21 3120210 / int.101 ______________________________________________ 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