2014年度マイコースプログラム

4回生K.K. @統計遺伝学分野

8月31日(日)

やはり家だとあまり働かないので、できるだけ研究室に行くようにしよう。

先生の助言と試行錯誤の繰り返しにより、行列をつくる関数は完成した。

mat1<-function(n,N){
if (N==0) return (matrix(0,ncol=n))
else if(n==1)return(matrix(N)) 
else{
tmp.list<-list()
cnt<-1
for (i in 0:N){
tmp.out<-cbind(mat1(n-1,N-i),i)
tmp.list[[cnt]]<-tmp.out
cnt<-cnt+1
}
mat2<-numeric(0)
for(j in 1:(N+1)){
mat2<-rbind(mat2,tmp.list[[j]])
}
return(mat2)
}
}

> mat1(3,9)
        i i
 [1,] 9 0 0
 [2,] 8 1 0
 [3,] 7 2 0
 [4,] 6 3 0
 [5,] 5 4 0
 [6,] 4 5 0
 [7,] 3 6 0
 [8,] 2 7 0
 [9,] 1 8 0
[10,] 0 9 0
[11,] 8 0 1
[12,] 7 1 1
[13,] 6 2 1
[14,] 5 3 1
[15,] 4 4 1
[16,] 3 5 1
[17,] 2 6 1
[18,] 1 7 1
[19,] 0 8 1
[20,] 7 0 2
以下略

ちなみにこの関数、調子に乗ってmat1(10,100)としたら、あっさりフリーズした。

僕のパソコンではかなり限界がくるのが早いようである。



本当に多くの教訓を得た気がするが、大事なものを挙げると、

・list()の利用

・カウンタの利用

・空行列にはnumeric(0)を使えばよい。

くらいか。



明日はこれを使ってp値を求められるようにした後、マイコースでやろうと思っていた疫学の勉強に入っていこうと思う。

以上