2012-06-19 8 views
8

Jak wygenerować sekwencję liczb w postępie geometrycznym w R? na przykład potrzebuję wygenerować sekwencję: 1, 2,4,8,16,32 i tak dalej ... aż powiesz skończoną wartość?Liczby w postępie geometrycznym

+9

'2^nast (0, 5, o = 1)' – baptiste

Odpowiedz

6

Oto co zrobię:

geomSeries <- function(base, max) { 
    base^(0:floor(log(max, base))) 
} 

geomSeries(base=2, max=2000) 
# [1] 1 2 4 8 16 32 64 128 256 512 1024 

geomSeries(3, 100) 
# [1] 1 3 9 27 81 
+0

dziękuję, możesz zobaczyć mój komentarz powyżej i powiedz mi, czy mogę napisać ten kod w taki sposób? Jestem początkującym i dlatego mam wiele wątpliwości :( – Maddy

+0

Jaki jest twój ostateczny cel? Czy piszesz scenariusz, aby zrobić coś w R, a jeśli tak, to co próbujesz z tym zrobić? Jeśli jesteś nowy w R, małe badanie może pomóc dużo w średnim okresie. To pytanie ma wiele zasobów: http://stackoverflow.com/questions/192369/books-for-learning-the-r-language – SlowLearner

+0

@Maddy - odpowiedź Josha brzmi: chcesz, abym się spodziewał. 'geomSeries (2,32)' jak opisano w jego odpowiedzi, da ci podstawową 2 progresję aż do maksymalnej wartości 32. – thelatemail

4

Dlaczego nie wystarczy wpisać 2^(0: n)? Na przykład. 2^(0: 5) spowoduje przejście od 1 do 32 i tak dalej. Capture the vector poprzez przypisanie do zmiennej tak: x < - 2^(0: 5)

+0

kiedy chce sekwencję od powiedzmy 1 do 100, wzrastających od 10, i napisać: SEK (1, 100, według = 10). więc teraz chcę sekwencji od 1 do 1000, które wzrasta geometrycznie jak 1, następnie 2, następnie 4 i tak dalej. – Maddy

+0

Coś takiego, aby uzyskać geometryczne postępy, które zawsze kończą się mniej niż podana liczba (w tym przypadku 1000): '2^(1: podłoga (log (1000,2)))' – thelatemail

+2

Zaproponuj, żebyś spojrzał na ' seq() ', zgodnie z komentarzem baptysty powyżej. Wykonaj '?' I nazwę funkcji, aby uzyskać pomoc dotyczącą funkcji R, więc '? Seq'. W tym przypadku potrzebujesz czegoś takiego jak "seq (0, 10, by = 10)". Zauważ, że idzie od 0 do 100, a nie od 1 do 100, co nie jest serią regularnych odstępów. – SlowLearner

3

Można znaleźć żadnego warunku w geometryczny sekwencji tej funkcji matematycznej:

okresie = początek * stosunek ** (n-1)

Gdzie:

termin = termin w sekwencji, którą chcesz
start = pierwszy termin w sekwencji
stosunek = wspólna proporcja (tj. wielokrotność, która definiuje sekwencję) n = numer terminu w sekwencji, którą chcesz

Zapisanie funkcji w R, która zapewnia dowolny podzbiór sekwencji geometrycznej dla dowolnego początku i proporcji:

#begin = beginning of subset 
#end = end of subset 

geomSeq <- function(start,ratio,begin,end){ 
    begin=begin-1 
    end=end-1 
    start*ratio**(begin:end) 
} 

geomSeq(1, 2, 1, 10) 
# [1] 1 2 4 8 16 32 64 128 256 512 

geomSeq(10,3,1,8) 
# [1] 10 30 90 270 810 2430 7290 21870 

geomSeq(10,3,4,8) 
# [1] 270 810 2430 7290 21870 

More on geometric sequences