Я пытаюсь выполнить упражнение на последовательности Фибоначчи в R. Суть в том, что животные смертны.
Цель состоит в том, чтобы ввести 3 переменные (продолжительность жизни, общая продолжительность, количество потомков). Животным требуется 1 единица времени для созревания. Чтобы решить эту проблему, я создаю матрицу с таймером в первом ряду, числом пар потомков во втором ряду, затем зрелыми парами, затем суммой потомков и зрелых пар. Я принимаю во внимание смертность, вычитая из зрелых животных количество животных, которые родились "я" несколько месяцев назад (i = продолжительность жизни)
vec <- vector()
wabbits3 <- function(i,k,l) {
wabbits3_chabo(i,k,l,1,0, vec, 1, i)
}
wabbits3_chabo <- function(i,k,l,m,n,t,o,p){
if (k == 0) {print(t)}
else if (p == 1) {wabbits3_chabo(i, (k-1), l,
((n+m-(t[2,(ncol(t)-i+1)]))*l),
(n+m-(t[2,(ncol(t)-i+1)])),
cbind(t, c((o),
(m),
(n),
(m+n))),
(o+1),
1)}
else {wabbits3_chabo(i, (k-1), l,
(n*l),
(n+m),
cbind(t, c((o),
(m),
(n),
(m+n))),
(o+1),
(p-1))}
}
Теперь к актуальному вопросу: если я проверю числа: wabbits3(365, 6, 1)
, он никогда не войдет в ветвь else if, так как никогда не достигнет p = 1, и все работает нормально.
Но при выборе меньших чисел (wabbits3(3, 6, 1)
) он входит в ветку else if
, и добавление "(m+n)
" больше не работает.
Команда cbind
точно такая же в ветвях "if
" и "e lse if
", так почему же она не работает оба раза?
Результат wabbits3(365, 6, 1)
:
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 2 3 4 5 6
[2,] 1 0 1 1 2 3
[3,] 0 1 1 2 3 5
[4,] 1 1 2 3 5 8
(сумма во втором и третьем ряду, отображаемая в четвертом ряду работает)
Результат wabbits3(3, 6, 1)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 2 3 4 5 6
[2,] 1 0 1 4 5 6
[3,] 0 1 1 4 5 6
[4,] 1 1 2 4 5 6
(добавление второй и третьей строки больше не работает, когда оно входит в ветку else if
(в четвертом столбце))
Моя проблема понятна? Что-нибудь неясно?
Заранее спасибо!
PS .: Я уверен, что в моем коде есть другие ошибки, но я бы предпочел найти их самостоятельно. Прямо сейчас я просто сбит с толку, почему это так просто, как дополнение не работает ...
РЕДАКТИРОВАТЬ: Оказывается, простое использование rbind (в обеих ветвях, конечно) может решить проблему ... Но почему?!