On Monday 17 September 2007, you wrote:
> R 2.6.0 has Reduce;
>
> myvec <- c(2, 8, 24, 26, 51, 57, 58, 78, 219)
> Reduce(function(myvec, p) setdiff(myvec, findSubsets2(p)), myvec, myvec)

Thanks Gabor, at first I jumped off my chair but... for many input variables 
it takes <ages> to reduce the vector. My crude solution is way faster than 
Reduce()
For 9 input variables:

`findSubsets2` <- 
function(element) {
    require(QCA)
    base3row <- getRow(rep(3,9), element, zerobased=TRUE)
    increment <- function(x, y) {
        a <- x
        for (i in 1:2) {
            a <- as.vector(outer(y, a, "+"))
            x <- c(x, a)
            }
        return(x)
        }
    indices <- which(base3row == 0)
    mbase <- c(6561, 2187, 729, 243, 81, 27, 9, 3, 1)
    for (i in indices) {
        element <- increment(element, mbase[i])
        }
    return(element[-1])
    }


`myreduce` <- function(myvec) {
    position <- 1
    while(position < length(myvec)) {
        falsevector <- findSubsets2(myvec[position])
        myvec <- setdiff(myvec, falsevector)
        position <- position + 1
        }
    return(myvec
    }


The timings for the tests:
set.seed(1)
myvec1 <- myvec2 <- sort(sample(3^9, 3^8)) - 1

> system.time(myvec1 <- myreduce(myvec1))
   user  system elapsed
  0.200   0.004   0.204

> system.time(myvec2 <- Reduce(function(myvec2, p) setdiff(myvec2, 
findSubsets2(p)), myvec2, myvec2))
   user  system elapsed
 12.093   0.000  12.095

With 14 input variables my function takes 24 seconds to complete, and I'd like 
to process 20 such input variables (their complexity grow exponentially)...

Thanks again,
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@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.

Reply via email to