27

我有一个问题肯定看起来很微不足道,但答案总是暗示我:如何从 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

有没有办法格式化print语句,for-loop以便print语句本身返回格式化为 in 的输出my.output?我知道我也可以在 for 循环中放置一个矩阵来存储 的值,r然后interest在循环完成后打印矩阵。但是,我认为使用print语句会更容易,特别是因为我不需要保留ror的值interest

谢谢你的任何建议。再次抱歉,这个问题太琐碎了。我已经在很长一段时间内搜索了很多答案,但从未找到解决方案。也许我已经在这篇文章中提出了足够多的解决方案,从而使其他可能的解决方案变得多余。尽管如此,我仍然感兴趣。

编辑:

除了下面的有用回复之外,我刚刚意识到使用:

print (c(r, interest))

在上面for-loop也有效。

4

2 回答 2

23

尝试catsprintf在您的 for 循环中。

例如。

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

这里

于 2012-04-15T08:29:55.207 回答
4

作为附加说明,由于 R 的矢量化,不需要 for 循环。

这:

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是一个向量,所以上面包含它的表达式对向量的所有值执行。

于 2012-04-15T08:35:26.833 回答