2012-10-12 17 views
6

Sia ho un array comeper() larghezza del passo anello

a <- seq(1, 100, 1) 

e voglio selezionare solo gli elementi che si verificano ogni 3 gradini con un ciclo for() partire dalla seconda, ad esempio 2, 5, 8, 11 e così via.

Come devo usare for() in questo caso?

b <- NULL 
# for(i in 1:length(a)) { # Is there any additional argument? 
    # b[i] <- a[...] # Or I can just multiply 'i' by some integer? 
# } 

Grazie,

+0

È should't utilizzare un ciclo for per questo – Dason

risposta

11

Usa 3 come valore per by in seq

for (i in seq(2, length(a), by=3)) {} 

> seq(2, 11, 3) 
[1] 2 5 8 11 
+0

Sono un po 'confuso da diverse lingue, stavo cercando qualcosa di simile 'for (i in 1: lunghezza (a); i + 3) {} 'e cose simili :) –

+0

Se stai pensando in questo modo finirai con un codice R molto inefficiente, anche se capisci come farlo in R. Valuta di postare una porzione maggiore del tuo problema in un'altra domanda, soprattutto se il codice sembra funzionare lentamente. – John

3

Perché usare for?

b <- a[seq(2,length(a),3)] 
+0

Per colpa mia, nel problema originale che volevo risolvere non avevo altra scelta che usare 'for()'; nell'esempio SO non ho riprodotto il mio problema originale, ma ho specificato che volevo usare 'for()'. –

+1

Se davvero devi usare for(), devi comunque rendere la quantità di codice nel loop più piccola possibile. La selezione della sequenza nell'esempio for() è in realtà al di fuori del ciclo. Dovresti pensare il più possibile al fine di ottimizzare il tuo codice R. – John