2012-04-15 89 views
15

我有一个问题肯定看起来很琐碎,但答案总是暗指我:如何在同一行上打印多个变量的值在for循环?在for循环中打印同一行上多个变量的值

我提出了两种解决方案,这两种解决方案都不仅仅依赖格式化的print声明,而且我仍然对是否可以使用print本身用于以所需格式返回输出感兴趣。

首先,我介绍了for-loop,其中包含一个解决方案,然后我提出这代表了另一种解决方案的功能:

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 

有没有办法来格式化的for-loop使得print声明print陈述,本身返回的格式如my.output所示?我知道我也可以在存储rinterest的值的for循环中放置一个矩阵,然后在循环完成后打印矩阵。不过,我认为使用print声明会更容易,尤其是因为我不需要保留rinterest的值。

谢谢你的任何建议。对不起,这个问题是如此微不足道。我在很长一段时间内对这个答案进行了相当多的搜索,但从未找到解决方案。也许我已经在这篇文章中提出了足够的解决方案,以使更多可能的解决方案过度使用尽管如此,我仍然感兴趣。

编辑:

除了有用的反应低于我才意识到,使用:

print (c(r, interest)) 

在上面for-loop也适用。

+0

看看猫而不是印刷品。 – 2012-04-15 08:20:11

+0

谢谢。所有的反馈都很棒。这就是为什么我喜欢这个网站。 – 2012-04-15 09:29:45

回答

15

在您的for循环中尝试使用catsprintf

例如。

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

here

3

作为附加的注释,就没有必要对,因为的r量化的循环。

此:

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 
} 

相当于:

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 

由于r是矢量,上述含它的矢量的所有值进行表达。