- aからbを選ぶ場合の数は、です。
- これに対応するRの関数はchoose()で
> choose(10,3)
[1] 120
- aからbを選ぶのは、aをb+c,ただしb+c=aに分けること。
- Nをn1,n2,...,nk, na+n2+...+nk=Nに分けるのは
- そんな関数は。ただし、n1,...,nkは、全部与えても、nkを省略してもよいものとした。
chooseVec<-function(a,b){
s<-sum(b)
if(a==s){
ret<--sum(lgamma(b+1))
ret<-ret+lgamma(a+1)
return(exp(ret))
}
if(a!=s){
x<-a-s
ret<--sum(lgamma(b+1))
ret<-ret-lgamma(x+1)
ret<-ret+lgamma(a+1)
return(exp(ret))
}
}
> chooseVec(10,c(3,7))
[1] 120
> chooseVec(10,3)
[1] 120
> chooseVec(25,c(15,1,9))
[1] 32687600
> chooseVec(25,c(15,1))
[1] 32687600