[R] yet another vectorization question
Philippe Grosjean
phgrosjean at sciviews.org
Mon Jan 30 13:40:34 CET 2006
Hello,
Not exactly the same. By the way, why do you use do.call()? Couldn't you
do simply:
expand.grid(split(t(replicate(3, c(0, 1, NA))), 1:3))
Best,
Philippe Grosjean
Jacques VESLOT wrote:
> 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 at 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
>
>
More information about the R-help
mailing list