2012-04-15 35 views
15

Tengo una pregunta que seguramente debe parecer muy trivial, pero la respuesta siempre me ha aludido: ¿cómo se imprimen valores para múltiples variables en la misma línea de dentro de un for-loop?Imprimir valores para múltiples variables en la misma línea desde un for-loop

presento dos soluciones que no se basan en nada más que una declaración formateada print, y todavía estoy interesado en si print puede, por sí mismo, ser utilizado para devolver la salida en el formato deseado.

En primer lugar presento la for-loop, que contiene una solución, y luego presento una función que representa otra solución:

P <- 243.51 
t <- 31/365 
n <- 365 

for (r in seq(0.15, 0.22, by = 0.01)) { 

    A <- P * ((1 + (r/ n))^ (n * t)) 
    interest <- A - P 

    # this prints each variable on a separate line 
    print (r) 
    print (interest) 

    # this does not work 
    # print c(r, interest) 

    # this presents both variables on the same line, as desired 
    output <- c(r,interest) 
    print(output) 

    # EDIT - I just realized the line below prints output in the desired format 
    print (c(r, interest)) 

} 


# this function also returns output in the desired format 

data.fn <- function(r) { 

    interest <- P*(1+(r/ n))^(n*t) - P 
    list(r = r, interest = interest) 

} 

my.output <- as.data.frame(data.fn(seq(0.15, 0.22, by = 0.01))) 
my.output 

#  r interest 
# 1 0.15 3.121450 
# 2 0.16 3.330918 
# 3 0.17 3.540558 
# 4 0.18 3.750370 
# 5 0.19 3.960355 
# 6 0.20 4.170512 
# 7 0.21 4.380842 
# 8 0.22 4.591345 

¿Hay una manera de formatear print declaraciones en el for-loop por lo que la declaración print, por sí mismo, devuelve salida formateada como en my.output? Sé que también podría colocar una matriz dentro del for-loop que almacena los valores de r y interest y luego imprimir la matriz después de que termine el ciclo. Sin embargo, pensé que usar una declaración print sería más fácil, especialmente porque no necesito retener los valores de r o interest.

Gracias por cualquier consejo. Perdón otra vez, esta pregunta es muy trivial. He buscado bastante la respuesta durante un período prolongado, pero nunca he encontrado la solución. Tal vez he presentado suficientes soluciones en esta publicación para hacer posibles soluciones adicionales excesivas. Sin embargo, sigo interesado.

EDIT:

Además de las respuestas a continuación votos me acabo de dar cuenta que el uso de:

print (c(r, interest)) 

en el anterior for-loop también funciona.

+0

Eche un vistazo al gato en lugar de imprimir. –

+0

Gracias. Todos los comentarios fueron geniales. Es por eso que amo este sitio. –

Respuesta

15

Pruebe cat y sprintf en su bucle for.

por ejemplo.

cat(sprintf("\"%f\" \"%f\"\n", df$r, df$interest)) 

Ver here

3

Como una nota adicional, no hay necesidad de que el bucle debido a la vectorización de R.

Este:

P <- 243.51 
t <- 31/365 
n <- 365 

for (r in seq(0.15, 0.22, by = 0.01))  
    A <- P * ((1 + (r/ n))^ (n * t)) 
    interest <- A - P 
} 

es equivalente a:

P <- 243.51 
t <- 31/365 
n <- 365 
r <- seq(0.15, 0.22, by = 0.01) 
A <- P * ((1 + (r/ n))^ (n * t)) 
interest <- A - P 

Debido r es un vector, la expresión anterior que lo contiene se lleva a cabo para todos los valores del vector.

Cuestiones relacionadas