重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Rでライフゲームを1世代先に進める関数を作成しました。関数作成時にはエラーは発生しませんでしたが、因数として行列を与え実行するとエラーが発生しました。エラーの原因を教えて頂けたら嬉しいです。
  作成した関数
Life.Game.One.Step <- function(Space) { #因数として行列を読み込む
n <- dim(Space)
Space.ng <- Space   #次世代の状態を格納する行列を生成
Space.counts <- Space #周囲の生きているセルの数を数え上え、それを格納する行列を生成
Space.counts[1,1] <- Space[1,2]+Space[2,1]+Space[2,2] #4隅の生きているセルの数を数え上げる
Space.counts[1,n[2]] <- Space[1,n[2]-1]+Space[2,n[2]-1]+Space[2,n[2]]
Space.counts[n[1],1] <- Space[n[1]-1,1]+Space[n[1]-1,2]+Space[n[1],2]
Space.counts[n[1],n[2]] <- Space[n[1]-1,n[2]-1]+Space[n[1]-1,n[2]]
+Space[n[1],n[2]-1]
for( j in c(2:n[2]-1) ) { #4隅を除いた1行目と最終行の周りの生きているセルの数を数え上げる
Space.counts[1,j] <- Space[1,j-1]+Space[1,j+1]+Space[2,j-1]+Space[2,j]+Space[2,j+1]
Space.counts[n[1],j] <- Space[n[1]-1,j-1]+Space[n[1]-1,j]+Space[n[1]-1,j+1]+Space[n[1],j-1]+Space[n[1],j+1]
}
for( i in c(2:n[1]-1) ) { #4隅を除いた1列目と最終列の周囲の生きているセルの数を数え上げる
Space.counts[i,1] <- Space[i-1,1]+Space[i-1,2]+Space[i,2]+Space[i+1,1]+Space[i+1,2]
Space.counts[i,n[2]] <- Space[i-1,n[2]-1]+Space[i-1,n[2]]+Space[i,n[2]-1]+Space[i+1,n[2]-1]+Space[i+1,n[2]]
}
for ( i in c(2:n[1]-1) ) { 
for ( j in c(2:n[2]-1) ) {
Space.counts[i,j] <- Space[i-1,j-1]+Space[i-1,j]+Space[i-1,j+1]
+Space[i,j-1]+Space[i,j+1]
+Space[i+1,j-1]+Space[i+1,j]+Space[i+1,j+1]
}
}
for ( i in c(1:n[1]) ) {  #Space.count[i,j]の値に応じて
for( j in c(1:n[2]) ) { #Space.ng[i,j]に次世代の状態を代入していく
if (Space.count[i,j]<2) {
Space.ng[i,j] <- 0
} else if(Space.count[i,j]==3) {
Space.ng[i,j] <- 1
} else if(Space.count[i,j]>3) {
Space.ng[i,j] <- 0
}
}
}
return(Space.ng)  #返り値として1世代先の行列を返す
}
関数に行列を因数として実行すると以下のようなエラーメッセジーが生成されました。
> Life.Game.One.Step(Life.Space.A)
以下にエラー Space.counts[1, j] <- Space[1, j - 1] + Space[1, j + 1] + Space[2, :
replacement(置き換え)の長さが0です

A 回答 (1件)

debug で追ってみましたか? 使い方は



?debug

で出ます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。なんとか解決できました。どうやら単純に( )をつけ忘れていたようでした。

お礼日時:2010/05/13 11:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!