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値を求められるようにした後、マイコースでやろうと思っていた疫学の勉強に入っていこうと思う。
以上