[R] creating a reverse geometric sequence
Dan Davison
davison at stats.ox.ac.uk
Sun May 23 20:30:07 CEST 2010
Erik Iverson <eriki at ccbr.umn.edu> writes:
> 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?
Hi Erik,
How about
dg <- function(x) {
maxi <- floor(log(x)/log(2))
floor(x / (2^(0:maxi)))
}
I don't think the remainders cause a problem.
Dan
>
> Thanks,
> Erik
More information about the R-help
mailing list