\HeaderA{r2dtable}{Random 2-way Tables with Given Marginals}{r2dtable}
\keyword{distribution}{r2dtable}
\begin{Description}\relax
Generate random 2-way tables with given marginals using Patefield's
algorithm.
\end{Description}
\begin{Usage}
\begin{verbatim}
r2dtable(n, r, c)
\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{n}] a non-negative numeric giving the number of tables to be
drawn.
\item[\code{r}] a non-negative vector of length at least 2 giving the row
totals, to be coerced to \code{integer}.  Must sum to the same as
\code{c}.
\item[\code{c}] a non-negative vector of length at least 2 giving the column
totals, to be coerced to \code{integer}.
\end{ldescription}
\end{Arguments}
\begin{Value}
A list of length \code{n} containing the generated tables as its
components.
\end{Value}
\begin{References}\relax
Patefield, W. M. (1981)
Algorithm AS159.  An efficient method of generating r x c tables
with given row and column totals.
\emph{Applied Statistics} \bold{30}, 91--97.
\end{References}
\begin{Examples}
\begin{ExampleCode}
## Fisher's Tea Drinker data.
TeaTasting <-
matrix(c(3, 1, 1, 3),
       nrow = 2,
       dimnames = list(Guess = c("Milk", "Tea"),
                       Truth = c("Milk", "Tea")))
## Simulate permutation test for independence based on the maximum
## Pearson residuals (rather than their sum).
rowTotals <- rowSums(TeaTasting)
colTotals <- colSums(TeaTasting)
nOfCases <- sum(rowTotals)
expected <- outer(rowTotals, colTotals, "*") / nOfCases
maxSqResid <- function(x) max((x - expected) ^ 2 / expected)
simMaxSqResid <-
    sapply(r2dtable(1000, rowTotals, colTotals), maxSqResid)
sum(simMaxSqResid >= maxSqResid(TeaTasting)) / 1000
## Fisher's exact test gives p = 0.4857 ...
\end{ExampleCode}
\end{Examples}

