2013-07-15 20 views
6

Ich bin ein Neuling in R, und so schien in C und Python gut zu funktionieren, bricht überraschend in R. Ich versuche, das Produkt zu berechnen der ersten 1000 Fibonacci-Zahlen. Hier ist der vollständige Code:Einfache Schleife in R "Ersatz hat Länge Null" in 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 

Dies gibt die folgende Fehlermeldung:

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

Ich bin geneigt zu glauben, ich falsch verstanden haben mit verschiedenen Elemente eines Arrays arbeitet (vielleicht der i-2 in den Vektor Beschreibung ist nicht korrekt), aber ich habe in den letzten anderthalb Stunden nichts gefunden, was mir geholfen hätte, es zu korrigieren. So würde jeder Einblick in die Ursache des Problems am meisten geschätzt werden.

Vielen Dank im Voraus.

+2

Eine einfache Technik ist, das Debugging 'print (i) einzufügen' am Anfang der Schleife. Das hätte Ihnen gesagt, wo der Fehler aufgetreten ist, damit Sie herausfinden können, was das Problem ist. –

+1

Ich hatte ein ähnliches Problem, nahm Ihren Rat, es funktioniert nicht, weil wir den Fehler bekommen, so dass print() passiert. – Benzle

Antwort

14

Arrays in R sind 1-basiert.

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

(der Rest wie in Ihrer Frage)

Das Problem ist Fibonacci[0] das ist eine 0-Länge numerisch. Wenn i = 2 hat dieser Ausdruck, der eine rechte Seite numeric(0):

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

Das war es; Ich habe mit 1 angefangen und alles hat perfekt funktioniert. Danke vielmals! Obwohl die 1000. Fibonacci-Zahl 4,3 * 10^208 ist, wird das Produkt der ersten 1000 als "unendlich" angezeigt. Ich denke, es gibt nicht viel zu tun, aber ... – user2585222

+0

Vielen Dank! Ich hatte keine Ahnung! Ich habe ein ähnliches Problem für 2 Stunden gedreht, bis ich es schließlich gegoogelt habe und das gefunden habe. Riesige Hilfe. – stevenjoe