multinom {multicool} | R Documentation |
This function calculates the number of permutations of a multiset, this being the multinomial coefficient. If a set X contains k unique elements x_1, x_2, …, x_k with associate counts (or multiplicities) of n_1, n_2, …, n_k, then this function returns
n!/(n_1!n_2!… n_k!)
where n = n_1 + n_2 + \cdots + n_k.
multinom(x, counts = FALSE, useDouble = FALSE)
x |
Either a multiset (with one or more potentially non-unique elements), or if |
counts |
if |
useDouble |
if |
multinom depends on C++ code written by Dave Barber which can be found at http://tamivox.org/dave/multinomial/code.html. The code may require the STL algorithm library to be included in order to compile it.
A single integer representing the multinomial coefficient for the given multiset, or given set of multiplicities.
James M. Curran, Dave Barber
http://tamivox.org/dave/multinomial/code.html
## An example with a multiset X = (a,a,a,b,b,c) ## There are 3 a s, 2 b s and 1 c, so the answer should be ## (3+2+1)!/(3!2!1!) = 6!/3!2!1! = 60 x = rep(letters[1:3],3:1) multinom(x) ## in this example x is a vector of counts ## the answer should be the same as above as x = c(3,2,1) x = rep(letters[1:3],3:1) x = as.vector(table(x)) #coerce x into a vector of counts multinom(x, counts = TRUE) ## An example of integer overflow. x is a vector of counts ## c(12,11,8,8,6,5). The true answer from Maple is ## 11,324,718,121,789,252,764,532,876,767,840,000 ## The error in the integer based answer is obvious. ## The error using floating point is not, but from Maple is ## 0.705057123232160000e+10 ## Thanks to Lev Dashevskiy for calling my attention to this. ## Not run: x = c(12,11,8,8,6,5) multinom(x, counts = TRUE, useDouble = FALSE) multinom(x, counts = TRUE, useDouble = TRUE) ## End(Not run)