[R] select randomly from a list

Boris Steipe boris.steipe at utoronto.ca
Thu May 22 14:17:54 CEST 2014


You are probably encountering an annoying behaviour of sample(): when it is given exactly one integer as an argument, it takes this as the upper limit of a range.

a <- c(3,5)
sample(a,10, replace=TRUE)
#[1] 5 5 3 3 3 3 3 3 3 5


a <- c(5)
sample(a,10, replace=TRUE)
#[1] 2 1 3 1 1 3 4 5 1 4

#i.e. this is the same as 
sample(1:5,10, replace=TRUE)

#An easy way to catch this is:

if (length(a) > 1) sample(a,1) else a 



Boris



On 2014-05-22, at 5:05 AM, Jim Lemon wrote:

> On Thu, 22 May 2014 09:54:13 AM Ragia Ibrahim wrote:
>> Hi,
>> kindly I want to select randomly and item from list of items. the list
>> generated in a looping process. I used sample(mylist,1) it works fine.
>> BUTsome times the list have only one item. that should be chosen in 
> this
>> case since there is no other one. I found that sample return different 
> item
>> not included in the list thanks in advance
>> RAE
>> 
> Hi RAE,
> This doesn't happen in an example like this:
> 
> for(i in 1:5) {
> testlist<-list()
> for(j in 1:i) testlist[[j]]<-sample(LETTERS[1:26],1)
> cat("list is\n")
> print(testlist)
> cat("sample is\n")
> print(sample(testlist,1))
> }
> 
> How are you generating your lists?
> 
> Jim
> 
> ______________________________________________
> R-help at 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.



More information about the R-help mailing list