[R] select randomly from a list

peter dalgaard pdalgd at gmail.com
Thu May 22 11:50:39 CEST 2014


It's a well known quirk of sample that it changes behavior when the x argument has length 1:

> replicate(10,sample(4:5, 1))
 [1] 5 4 5 4 5 4 5 4 4 4
> replicate(10,sample(5:5, 1))
 [1] 5 3 1 1 1 2 5 3 2 2

One workaround is to zap the offending branch inside sample:

> Sample <- function (x, size, replace = FALSE, prob = NULL) 
       x[sample.int(length(x), size, replace, prob)]
> replicate(10,Sample(5:5, 1))
 [1] 5 5 5 5 5 5 5 5 5 5

(It's one of the cases of misguided user-friendliness that is probably long regretted by its authors, but has been around for so long that it is painful to change because code relies on the current behavior. A similar case is diag().)

-pd

On 22 May 2014, at 11:05 , Jim Lemon <jim at bitwrit.com.au> 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.

-- 
Peter Dalgaard, Professor
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com



More information about the R-help mailing list