[R] creating a reverse geometric sequence

Duncan Murdoch murdoch.duncan at gmail.com
Sun May 23 20:12:18 CEST 2010


Erik Iverson wrote:
> Hello,
>
> Can anyone think of a non-iterative way to generate a decreasing geometric 
> sequence in R?
>
> For example, for a hypothetical function dg, I would like:
>
>  > dg(20)
> [1] 20 10 5 2 1
>
> where I am using integer division by 2 to get each subsequent value in the 
> sequence.
>
>
> There is of course:
>
> dg <- function(x) {
>    res <- integer()
>    while(x >= 1) {
>      res <- c(res, x)
>      x <- x %/% 2
>    }
>    res
> }
>
>  > dg(20)
> [1] 20 10  5  2  1
>
> This implementation of 'dg' uses an interative 'while' loop.  I'm simply 
> wondering if there is a way to vectorize this process?
>   
Something like this should work, at least for integer bases:

base <- 2
len <- ceiling(log(x, base))
floor(x/base^(seq_len(len)-1))


Duncan Murdoch



More information about the R-help mailing list