[R] Sampling from a Matrix

Marc Schwartz (via MN) mschwartz at mn.rr.com
Fri Aug 4 19:00:15 CEST 2006


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

See ?apply and ?t

HTH,

Marc Schwartz



More information about the R-help mailing list