【问题标题】:Simple for loop in R producing "replacement has length zero" in RR中的简单for循环在R中产生“替换长度为零”
【发布时间】:2013-07-13 23:05:44
【问题描述】:

我是 R 的新手,所以在 C 和 Python 中似乎可以正常工作的东西,在 R 中却出人意料地崩溃了。 我正在尝试计算前 1000 个斐波那契数的乘积。完整代码如下:

#PRRODUCT OF FIBONACCI NUMBERS
Fibonacci<-rep(0, 1000)
Fibonacci[0]<-1
Fibonacci[1]<-1
Product<-1

for (i in 2:1000)
{
    Fibonacci[i]<-(Fibonacci[i-1])+(Fibonacci[i-2])
    Product<-Fibonacci[i]*Product
}

Fibonacci[1000]
Product

这会返回以下错误:

Error in Fibonacci[i] <- (Fibonacci[X - 1]) + (Fibonacci[X - 2]) : 
  replacement has length zero

我倾向于认为我误解了使用数组的不同元素进行操作(也许向量描述中的 i-2 不正确),但在过去一个半小时内我没有发现任何可能帮我改正了。 因此,我们将非常感谢您对问题原因的任何见解。

提前谢谢你。

【问题讨论】:

  • 一个简单的调试技巧是在循环的开头插入print(i)。这会告诉您错误发生在哪里,以便您找出问题所在。
  • 我遇到了类似的问题,听了你的建议,它不起作用,因为我们收到了错误,所以没有 print() 发生。

标签: r for-loop


【解决方案1】:

R 中的数组是从 1 开始的。

Fibonacci[1]<-1
Fibonacci[2]<-1
Product<-1
for (i in 3:1000)
{

(您问题中的其余部分)

问题是Fibonacci[0],它是一个长度为 0 的数字。当i = 2 时,这个表达式的右手边是numeric(0)

Fibonacci[i]<-(Fibonacci[i-1])+(Fibonacci[i-2])

【讨论】:

  • 就是这样;我从 1 开始,一切都很完美。非常感谢!虽然第 1000 个斐波那契数是 4.3*10^208,而前 1000 个的乘积显示为“无穷大”。不过,我想这没什么可做的......
  • 谢谢!我不知道!我将类似的问题旋转了 2 个小时,直到我最终用谷歌搜索它并找到了这个。巨大的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多