2013-07-15 10 views
6

私はRの初心者ですので、CとPythonでうまく動作するように見えますが、Rで驚くことに分解されます。 最初の1000個のフィボナッチ数のうちの1つ。ここでは、完全なコードは次のとおりです。Rの簡単なforループRの "置換の長さゼロ"の生成R

#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の異なる要素で動作誤解していると考えに傾いています説明が間違っています)、私はそれを修正するのに役立った過去1時間半の間に何も見つかりませんでした。 したがって、問題の原因に関するすべての洞察が最も高く評価されます。

ありがとうございます。

+2

を簡単なデバッグ技術は、ループの先頭で ''プリント(i)を挿入することです。それはエラーの発生場所を教えてくれたので、問題の原因を突き止めることができました。 –

+1

私は同様の問題を抱えていました。あなたのアドバイスを受けました。エラーが発生しているので、動作しません。したがって、print()は起こりません。 – Benzle

答えて

14

Rの配列は1ベースです。

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

(あなたの質問のように余り)

問題は、長さ0の数値であるFibonacci[0]です。 i = 2、この式はnumeric(0)の右側にある場合:

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

それはそれでした。私は1で始まり、すべてが完全に機能しました。どうもありがとう! 1000フィボナッチ数は4.3 * 10^208ですが、最初の1000の積は "無限大"として表示されます。しかし、それについてはあまり関係ないと思います... – user2585222

+0

ありがとうございました!私は今まで知らなかった!私は最終的にそれを見つけてこれを見つけ出すまで、2時間同じような問題を起こしていました。巨大な助け。 – stevenjoe