Erik Iverson <er...@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

______________________________________________
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