[R] Newb: How I find random vector index?

Sarah Goslee sarah.goslee at gmail.com
Thu Oct 17 21:10:49 CEST 2013


Typo fix below:

On Thu, Oct 17, 2013 at 3:05 PM, Sarah Goslee <sarah.goslee at gmail.com> wrote:
> 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
  ^^^^^^^^^^^^^  just delete this.

>
> 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



More information about the R-help mailing list