2012-10-12 9 views
6

Niech I mają szereg jako() szerokość stopnia pętli

a <- seq(1, 100, 1) 

i chce wybrać tylko te elementy, które występują co 3 kroków w for() pętli, począwszy od drugiego, na przykład 2, 5, 8, 11 i tak dalej. W takim przypadku należy użyć for().

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? 
# } 

Dzięki

+0

should't użyć pętli for dla tego – Dason

Odpowiedz

11

Zastosowanie 3 jako wartość by w seq

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

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

jestem trochę zdezorientowany przez różnych językach, próbowałem coś podobnego 'for (i in 1: długość (a); i + 3) {} 'i takie rzeczy :) –

+0

Jeśli tak myślisz, to skończy się to bardzo nieefektywnym kodem R, nawet jeśli wymyślisz jak to zrobić w R. Rozważ umieszczenie większej części twojego problemu w inne pytanie, zwłaszcza jeśli kod wydaje się działać wolno. – John

3

Dlaczego wykorzystać for?

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

Moja wina, w oryginalnym numerze, który chciałem rozwiązać, nie miałem innego wyboru niż użycie 'for()'; w przykładzie SO nie powieliłem mojego oryginalnego problemu, ale sprecyzowałem, że chciałem użyć 'for()'. –

+1

Jeśli naprawdę musisz użyć dla(), to nadal musisz zmniejszyć ilość kodu w pętli. Wybór sekwencji w przykładzie for() jest faktycznie poza pętlą. Powinieneś tak myśleć w maksymalnym stopniu, aby zoptymalizować swój kod R. – John

Powiązane problemy