# Fixed size permutations

4 messages
Open this post in threaded view
|
Report Content as Inappropriate

## Fixed size permutations

 I'm using functions to return a matrix of all permutations of a specified size from a larger list for predictor selection. For each predictor size I use a seperate function like this: bag2 <- function(n) {     rl <- c()     for (i1 in seq(n)) {         for (i2 in seq(n)) {             if (length(unique(c(i1,i2)))==1) {next}             rl <- cbind(rl,matrix(c(i1,i2)))         }     }     rl } bag3 <- function(n) {     rl <- c()     for (i1 in seq(n)) {         for (i2 in seq(n)) {             for (i3 in seq(n)) {                 if (length(unique(c(i1,i2,i3)))==1) {next}                 rl <- cbind(rl,matrix(c(i1,i2,i3)))             }         }     }     rl } But I think it should be somehow possible in R to use one general function for all sizes. Can someone help? I don't exactly know how this kind of permutation is called, maybe this would help to find a solution. Nick ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|
Report Content as Inappropriate

## Re: Fixed size permutations

 Nick Fankhauser wrote: > I'm using functions to return a matrix of all permutations of a > specified size from a larger list for predictor selection. > For each predictor size I use a seperate function like this: > > bag2 <- function(n) { >     rl <- c() >     for (i1 in seq(n)) { >         for (i2 in seq(n)) { >             if (length(unique(c(i1,i2)))==1) {next} >             rl <- cbind(rl,matrix(c(i1,i2))) >         } >     } >     rl > } > > bag3 <- function(n) { >     rl <- c() >     for (i1 in seq(n)) { >         for (i2 in seq(n)) { >             for (i3 in seq(n)) { >                 if (length(unique(c(i1,i2,i3)))==1) {next} >                 rl <- cbind(rl,matrix(c(i1,i2,i3))) >             } >         } >     } >     rl > } > > But I think it should be somehow possible in R to use one general > function for all sizes. Can someone help? > I don't exactly know how this kind of permutation is called, maybe this > would help to find a solution. > > Nick > Looks to me like you're just doing expand.grid, but without the 'all variables equal' cases. If that's correct and if n > 1, then this might do it: bag <- function(n,K){    L <- vector(mode='list', length=K)    L <- lapply(L, function(x) {x <- seq_len(n)})    d <- expand.grid(L)    keeprow <- apply(d, 1, function(x) {var(x)!=0})      ## I'm blanking out on a better way to test for equal values    td <- t(as.matrix(d[keeprow,]))    dimnames(td) <- c(NULL, NULL)    rtd <- td[nrow(td):1,]    rtd } all.equal(bag(5,2), bag2(5)) #[1] TRUE all.equal(bag(9,3), bag3(9)) #[1] TRUE   -Peter Ehlers ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|
Report Content as Inappropriate

## Re: Fixed size permutations

 In reply to this post by Nick Fankhauser-2 Try this: v <- 1:5 n <- 2 t(subset(do.call(expand.grid, replicate(n, v, FALSE))[n:1], Var1 != Var2)) On Thu, Jan 14, 2010 at 9:51 AM, Nick Fankhauser <[hidden email]> wrote: > I'm using functions to return a matrix of all permutations of a > specified size from a larger list for predictor selection. > For each predictor size I use a seperate function like this: > > bag2 <- function(n) { >    rl <- c() >    for (i1 in seq(n)) { >        for (i2 in seq(n)) { >            if (length(unique(c(i1,i2)))==1) {next} >            rl <- cbind(rl,matrix(c(i1,i2))) >        } >    } >    rl > } > > bag3 <- function(n) { >    rl <- c() >    for (i1 in seq(n)) { >        for (i2 in seq(n)) { >            for (i3 in seq(n)) { >                if (length(unique(c(i1,i2,i3)))==1) {next} >                rl <- cbind(rl,matrix(c(i1,i2,i3))) >            } >        } >    } >    rl > } > > But I think it should be somehow possible in R to use one general > function for all sizes. Can someone help? > I don't exactly know how this kind of permutation is called, maybe this > would help to find a solution. > > Nick > > ______________________________________________ > [hidden email] 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. > -- Henrique Dallazuanna Curitiba-Paraná-Brasil 25° 25' 40" S 49° 16' 22" O ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.