感谢您对此功能的帮助,该功能应该:
以下是我的尝试:
rate<-function(Y2) {
ran<-seq(0.001,1,0.001)
for(i in ran) {
calculated<-as.vector(Y2/(1+i)+Y2/(1+i)^2+Y2/(1+i)^3+Y2/(1+i)^4)
tableau<-data.frame(ran,calculated)
}
return(tableau)
}
使用res<-rate(500)
进行测试时,只会返回1000次的最后一个值:
...
ran calculated
1 0.001 468.75
2 0.002 468.75
3 0.003 468.75
...
996 0.996 468.75
997 0.997 468.75
998 0.998 468.75
999 0.999 468.75
1000 1.000 468.75
我的循环有什么问题?
答案 0 :(得分:1)
每次循环时,您都会将as.vector(...)
计算的输出分配给同一个变量。然后你构建一个data.frame,每次循环时命名为tableau
。你只返回最后一次迭代。如果你想保存每次迭代,你需要索引一些东西:
res[n] <- as.vector(...)
或者更多R-ish版本,使用其中一个申请系列(特别是lapply
)并且根本没有循环:
rate <- function(Y2) {
ran <- seq(0.001, 1, 0.001)
result <- lapply(ran,
function(i) data.frame(ran = i,
calculated = as.vector(Y2/(1+i)+Y2/(1+i)^2+Y2/(1+i)^3+Y2/(1+i)^4)))
return (do.call(rbind, result))
}
话虽如此,没有理由循环或应用函数。使用R
向量化的事实:
ran <- seq(0.001, 1, 0.001)
Y2 <- 500
calculated <- as.vector(Y2/(1+ran)+Y2/(1+ran)^2+Y2/(1+ran)^3+Y2/(1+ran)^4)
result <- data.frame(ran, calculated)
all.equal(result, rate(500))
# [1] TRUE