ソースの整理

  • こんなソースがある
  • はじめに、ある処理を書いて、それを指定回数の繰り返し処理にしたことが読み取れる
  • また、指定回数の繰り返し関数に持ち上げるにあたって「繰り返し回数」のみを引数化していることが読み取れる
  • はじめに作った処理のうち、何が、条件か(何が変更可能か)という目で見て、それを全部、引数化するとすると、次のようになるだろうか
library(MCMCpack)
guriko<- function(n,trials=1000,q=rep(1/3,3),step.matrix=rbind(c(0,3,-6),c(-3,0,6),c(6,-6,0)),battle.num.record=FALSE){ #n回シミュレーションする
#trials<- 1000 #1000回グリコする
#p<- rdirichlet(1,c(1,1,1)) #グー、チョキ、パーの順
#q<- c(rep(1/3,3)) #とりあえず1/3の等確率
#pq<- t(p) %*% q #pとqが出すグー、チョキ、パーの掛け合わせ確率
#step.matrix<- rbind(c(0,3,-6),  #1回のじゃんけんでの相手からみた自分の変位
#                    c(-3,0,6),
#                    c(6,-6,0))

#battle.num<- matrix(rep(0,4*n),nc=4) #相手の手の確率を表記しない
 if(battle.num.record){
  battle.num<- matrix(rep(0,7*n),nc=7) #相手の手の確率を表記する
 }else{
  battle.num<- matrix(rep(0,4*n),nc=4) #相手の手の確率を表記しない
 }
 for(j in 1:n){
  battle<- c(rep(0,trials)) #勝数カウントベクトル
  p<- rdirichlet(1,c(1,1,1)) #グー、チョキ、パーの順
#q<- rdirichlet(1,c(1,1,1)) #グー、チョキ、パーの順
#q<- c(rep(1/3,3)) #とりあえず1/3の等確率
  pq<- (t(p)) %*% q #pとqが出すグー、チョキ、パーの掛け合わせ確率
  for(k in 1:trials){
   if(sum(sample(c(step.matrix),size=100,prob=c(pq),replace=T))>=0){ #変位が0以上なら勝ち
    battle[k]<- 1 #勝数増やす
   }
  }
  win.prob<- sum(battle)/trials #勝率
#battle.num[j,]<- c(p,win.prob)   #相手の手の確率を表記しない
  if(battle.num.record){
   battle.num[j,]<- c(p,q,win.prob) #相手の手の確率を表記する
  }else{
   battle.num[j,]<- c(p,win.prob)   #相手の手の確率を表記しない
  }
 }
 return(battle.num)
}
  • ソースのインデントのこと
    • こちらにあるように、インデントは重要
    • pythonはそもそも、インデントは文法になっている。それくらいインデントは普通のこと(こちら)
    • プログラミング支援系のテキストエディタは自動インデント機能がある(秀丸など)