[R] Newb: How I find random vector index?
Sarah Goslee
sarah.goslee at gmail.com
Thu Oct 17 21:05:23 CEST 2013
Not only does it not require a loop, this is a one-liner:
> myvec <- c(1,0,3,0,77,9,0,1,2,0)
> sample(which(myvec == 0), 1)
[1] 4
> sample(which(myvec == 0), 1)
[1] 7
> sample(which(myvec == 0), 1)
[1] 2
If there's a possibility of not having zeros then you'll need to check
that separately, otherwise sample() will throw an error. For instance:
if(any(myvec == 0)) {
sample(which(myvec == 0), 1)
}
which() will
Sarah
On Thu, Oct 17, 2013 at 2:54 PM, Stock Beaver <stockbeaver at ymail.com> wrote:
> # Suppose I have a vector:
>
> myvec = c(1,0,3,0,77,9,0,1,2,0)
>
> # I want to randomly pick an element from myvec
> # where element == 0
> # and print the value of the corresponding index.
>
> # So, for example I might randomly pick the 3rd 0
> # and I would print the corresponding index
> # which is 7,
>
> # My initial approach is to use a for-loop.
> # Also I take a short-cut which assumes myvec is short:
>
> elm = 1
> while (elm != 0) {
> # Pick a random index, (it might be a 0):
> rndidx = round(runif(1, min=1, max=length(myvec)))
> elm = myvec[rndidx]
> if(elm == 0)
> print("I am done")
> else
> print("I am not done")
> }
> print(rndidx)
>
> # If myvec is large and/or contains no zeros,
> # The above loop is sub-optimal/faulty.
>
> # I suspect that skilled R-people would approach this task differently.
> # Perhaps they would use features baked into R rather than use a loop?
> [[alternative HTML version deleted]]
>
--
Sarah Goslee
http://www.functionaldiversity.org
More information about the R-help
mailing list