2013-07-15 11 views
6

Sono un principiante in R, e quindi quello che sembrava funzionare bene in C e Python, si rompe sorprendentemente in R. Sto provando a calcolare il prodotto dei primi 1000 numeri di Fibonacci. Ecco il codice completo:Semplice per loop in R che produce "sostituzione ha lunghezza zero" 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 

Ciò restituisce il seguente errore:

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

sono incline a pensare che abbia fraintesi operando con diversi elementi di un array (forse l'i-2 nel vettore la descrizione non è corretta), ma non ho trovato nulla nell'ultima ora e mezza che mi avrebbe aiutato a correggerlo. Quindi, qualsiasi comprensione della causa del problema sarebbe più apprezzata.

Grazie in anticipo.

+2

Una tecnica semplice debug è quello di inserire 'di stampa (i)' all'inizio del ciclo. Questo ti avrebbe detto dove si è verificato l'errore in modo da poter capire qual è il problema. –

+1

Ho avuto un problema simile, ho seguito il tuo consiglio, non funziona perché stiamo ricevendo l'errore, quindi non avviene la stampa(). – Benzle

risposta

14

Le matrici in R sono basate su 1.

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

(il resto come nella domanda)

Il problema è che è un Fibonacci[0] numerico 0 lunghezza. Quando i = 2, questa espressione ha un lato destro della numeric(0):

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

Era così; Ho iniziato con 1 e tutto ha funzionato perfettamente. Molte grazie! Sebbene il 1000 ° numero di Fibonacci sia 4,3 * 10^208, e il prodotto del primo 1000 viene visualizzato come "infinito". Immagino che non ci sia molto da fare a riguardo, però ... – user2585222

+0

Grazie! Non ne avevo idea! Stavo girando un problema simile per 2 ore fino a quando ho finalmente cercato su Google e ho trovato questo. Enorme aiuto – stevenjoe