選ぶ

  • aからbを選ぶ場合の数は、\frac{a!}{b!(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に分けるのは
  • \frac{N!}{\prod_{i=1}^k ni!}
  • そんな関数は。ただし、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