R:在矩阵中添加数字时的行为不一致

时间:2019-03-06 00:04:55

标签: r matrix addition cbind

我正在尝试解决有关R中斐波那契数列的练习。症结在于这些动物是致命的。 目标是输入3个变量(寿命,总寿命,后代数量)。动物需要1个时间单位才能成熟。为了解决这个问题,我在第一行中创建了一个带有计时器的矩阵,在第二行中创建了后代对的数量,然后是成熟对,然后是后代与成熟对的总和。通过从成年动物中减去“ i”个月前出生的动物数(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(当然在两个分支中)似乎都可以解决问题……但是为什么?!

0 个答案:

没有答案