2016-12-02 4 views
1

Мне нужно суммировать смежные ячейки для игры жизни Конвея. У меня есть матрица 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, к]: неправильное число измерений

полный сценарий игры Конвея можно посмотреть здесь: https://www.r-bloggers.com/conway%E2%80%99s-game-of-life-in-r-with-ggplot2-and-animation/

Заранее спасибо

ответ

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 
Смежные вопросы