Un approccio è quello di utilizzare cumsum()
e imbrogliare un po '. Ad esempio, dato K
:
K <- 1:10
e mantenere le cose semplici sto aggiungendo 1
(non 100
) per K[1]
, vogliamo produrre:
> 1 + K[1]
[1] 2
> (1 + K[1]) + K[2]
[1] 4
> ((1 + K[1]) + K[2]) + K[3]
[1] 7
....
Si tratta di una somma cumulativa. Dobbiamo imbrogliare un po 'con la costante che vuoi aggiungere al primo elemento, poiché desideriamo che questo influenzi il primo elemento, non che venga aggiunto a ciascun elemento. Quindi questo è sbagliato
> L <- cumsum(1 + K)
> L
[1] 2 5 9 14 20 27 35 44 54 65
Quello che vogliamo davvero è:
> L <- cumsum(c(1, K))[-1]
> L
[1] 2 4 7 11 16 22 29 37 46 56
In cui abbiamo concatenare il costante al vettore K
come il primo elemento e applichiamo cumsum()
a questo, ma cadere il primo elemento dell'output da cumsum()
.
Questo può naturalmente essere fatto in un modo un po 'più semplice:
> L <- 1 + cumsum(K)
> L
[1] 2 4 7 11 16 22 29 37 46 56
cioè calcolare la cumusum()
e poi aggiungere sulla costante (che ora vedo è ciò che @ gd047 ha suggerito nella loro risposta.)
fonte
2012-10-24 10:50:22
+1 Neat - Avevo perso quello quando ho iniziato a scrivere la mia risposta, solo per farmi capire quando avevo finito. –
+1 Ho avuto difficoltà a trovare una soluzione vettoriale e sono tornato a usare un ciclo 'for'. I tempi nella mia risposta mostrano che questo è terribilmente lento rispetto all'utilizzo di "cumsum". –