Re: [R] Sampling from a Matrix

From: Liaw, Andy <andy_liaw_at_merck.com>
Date: Wed 09 Aug 2006 - 04:10:26 EST


From: Marc Schwartz  

> On Fri, 2006-08-04 at 12:46 -0400, Daniel Gerlanc wrote:
> > Hello all,
> >
> > Consider the following problem:
> >
> > There is a matrix of probabilities:
> >
> > > set.seed(1)
> > > probs <- array(abs(rnorm(25, sd = 0.33)), dim = c(5,5),
> dimnames =
> > > list(1:5, letters[1:5])) probs
> > a b c d e
> > 1 0.21 0.27 0.50 0.0148 0.303
> > 2 0.06 0.16 0.13 0.0053 0.258
> > 3 0.28 0.24 0.21 0.3115 0.025
> > 4 0.53 0.19 0.73 0.2710 0.656
> > 5 0.11 0.10 0.37 0.1960 0.205
> >
> > I want to sample 3 values from each row.
> >
> > One way to do this follows:
> >
> > index <- 1:ncol(probs)
> >
> > for(i in 1:nrow(probs)){
> >
> > ## gets the indexes of the values chosen
> >
> > sample(index, size = 3, replace = TRUE, prob = probs[i, ])
> >
> > }
> >
> > Is there a another way to do this?
> >
> > Thanks!
>
> > t(apply(probs, 1, function(x) sample(x, 3)))
> [,1] [,2] [,3]
> 1 0.210 0.5000 0.0148
> 2 0.258 0.0053 0.1300
> 3 0.025 0.2800 0.3115
> 4 0.190 0.5300 0.2710
> 5 0.196 0.1000 0.1100

Hmm... If I read Daniel's code (which is different from his description) correctly, that doesn't seem to be what he wanted. Perhaps something like this:

apply(probs, 1, function(p) sample(1:ncol(probs), 3, replace=TRUE, prob=p))

Andy  

> See ?apply and ?t
>
> HTH,
>
> Marc Schwartz



R-help@stat.math.ethz.ch 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. Received on Wed Aug 09 04:19:10 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Thu 10 Aug 2006 - 02:19:42 EST.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.