SV: [R] sample from contingency table

Dirk F. Raetzel raetzel at
Wed Sep 20 11:41:58 CEST 2000

On Today, Bill Venables wrote:

> Hey, hang on...  If I have understood the original question properly
> what you have to do is to sample from the cells of a contingency table
> with probabilities proportional to the frequencies in those cells.
> Here is the original question:

> I can't see why you would need a "search tree" for this problem
> either.  Here is (what I think is) a very simple solution:
well: if there wouldn't have been an easy way to do it, I would have
followed the suggestions of 'Ripley, Stochastic Simulation, 3.3 Discrete
distributions' ...

> sampct <- function(n, Fr) {
> # sample with replacement from a multivariate distribution
> # defined by a contingency table
>   if(!is.null(dfr <- dimnames(Fr)) &&
>      prod(sapply(dfr, length)) == length(Fr))
>     dfr <- expand.grid(dfr)
>   else
>     dfr <- expand.grid(lapply(dim(Fr), seq))
>   dfr[sample(1:nrow(dfr), n, prob = Fr, rep = T), ]
> }
This is exactly what I was looking for: Both from the result and from the
clever way of programming it. [Even so using sample() quite often, I did
not see the (a posteriori) obvious connection] 



r-help mailing list -- Read
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at

More information about the R-help mailing list