我需要为康威的生命游戏总结相邻的细胞。 我有一个20x20矩阵,我需要计算邻居才能申请 游戏规则。
我写的第一部分脚本
generar_grilla<-function(cant, prob_vida){
grilla<-matrix(ncol=cant, nrow=cant)
grilla[i]<-rbinom(cant,1,prob_vida)
return(grilla)
}
然后我在相关帖子中查看了计算邻居的一些规则,我发现了这个:
vecino<-function(grilla,j,k) {
cant <- nrow(grilla)
count <- 0
if(j > 1) {
count <- count + grilla[j-1, k]
if (k > 1) count <- count + grilla[j-1, k-1]
if (k < cant) count <- count + grilla[j-1, k+1]
}
if(j < cant) {
count <- count + grilla[j+1,k]
if (k > 1) count <- count + grilla[j+1, k-1]
if (k < cant) count <- count + grilla[j+1, k+1]
}
if(k > 1) count <- count + grilla[j, k-1]
if(k < cant) count <- count + grilla[j, k+1]
count
}
当我用一个例子运行脚本的这一部分时:
vecino(grilla,3,5)
我收到此错误:
grilla [j - 1,k]中的错误:维数不正确
可以在此处查看康威游戏的完整脚本:https://www.r-bloggers.com/conway%E2%80%99s-game-of-life-in-r-with-ggplot2-and-animation/
提前致谢
答案 0 :(得分:0)
您的功能generar_grilla
没有意义。它涉及一个未指定的i
。您可以按如下方式编写它(注意如何更容易首先创建值然后将它们形成矩阵,而不是首先创建矩阵然后用值填充它):
generar_grilla<-function(cant, prob_vida) {
cells = rbinom(cant^2,1,prob_vida)
matrix(cells,nrow = cant)}
然后按预期工作:
> grilla = generar_grilla(5,.2)
> grilla
[,1] [,2] [,3] [,4] [,5]
[1,] 0 1 0 1 1
[2,] 0 0 0 0 1
[3,] 0 0 0 0 0
[4,] 0 0 1 0 1
[5,] 0 0 0 0 0
> vecino(grilla,2,4)
[1] 3