康威生命游戏中相邻细胞的总和

时间:2016-12-02 18:28:40

标签: r conways-game-of-life

我需要为康威的生命游戏总结相邻的细胞。 我有一个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/

提前致谢

1 个答案:

答案 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