2012-06-19 16 views
8

¿Cómo puedo generar una secuencia de números que están en progresión geométrica en R? por ejemplo, necesito generar la secuencia: 1, 2,4,8,16,32 y así sucesivamente .... hasta decir un valor finito?Números en progresión geométrica

+9

'2^seq (0, 5, por = 1)' – baptiste

Respuesta

6

Esto es lo que haría:

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

gracias, ¿pueden ver mi comentario anterior y decirme si puedo escribir este código de esa manera? Soy un novato y por lo tanto tengo muchas dudas :( – Maddy

+0

¿Cuál es tu objetivo final? ¿Estás escribiendo un guión para hacer algo en R y, si es así, qué estás tratando de hacer con él? Si eres nuevo en R, un pequeño estudio ayudará mucho en el mediano plazo. Esta pregunta tiene muchos recursos: http://stackoverflow.com/questions/192369/books-for-learning-the-r-language – SlowLearner

+0

@Maddy - La respuesta de Josh es qué usted quiere que yo piense que 'geomSeries (2,32)' como se indica en su respuesta le dará una progresión de base 2 hasta el valor máximo de 32. – thelatemail

4

¿Por qué no simplemente ingrese 2^(0: n)? P.ej. 2^(0: 5) lo lleva del 1 al 32 y así sucesivamente. capturar el vector mediante la asignación a una variable de este modo: x < - 2^(0: 5)

+0

cuando quiero una secuencia de por ejemplo 1 a 100, incrementando por 10, escribo: SEQ (1, 100, por = 10). así que ahora quiero una secuencia de 1 a 1000 que se incremente geométricamente como 1, luego 2, luego 4 y así sucesivamente. – Maddy

+0

Algo así para obtener una progresión geométrica que siempre termina menos que el número especificado (el 1000 en este caso): '2^(1: piso (log (1000,2)))' – thelatemail

+2

Sugiero echar un vistazo a ' seq() ', según el comentario del baptiste anterior. Haga '?' Y el nombre de la función para obtener ayuda sobre una función R, así '' seq'. En este caso, quieres algo como 'seq (0, 10, by = 10)'. Tenga en cuenta que va de 0 a 100, no de 1 a 100, que no es una serie espaciada regularmente. – SlowLearner

3

se puede encontrar cualquier término de una sucesión geométrica con esta función matemática:

plazo = inicio * relación ** (n-1)

Donde:

term = el término en la secuencia que desea
start = el primer término en la secuencia
ratio = la proporción común (es decir el múltiplo que define la secuencia)
n = el número del término en la secuencia que desea

Usando esta información, escriba una función en R que proporcione cualquier subconjunto de una secuencia geométrica para cualquier inicio y razón:

#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