我必须将默认值5000设置为d。我正在使用此参数
Rfun <- function(d : 5000){
storage=c()
for(i in seq(0,40,2){
d <- d/(1.035^i)
storage <- append(storage,d)
}
storage
}.
也请有人提供逻辑支持。
谢谢
答案 0 :(得分:0)
您可以使用cumprod
Rfun2 <- function(d = 5000) d * cumprod(1 / (1.035 ^ seq(0, 40, 2)))
Rfun2(d = 2)
#[1] 2.000000e+00 1.867021e+00 1.627001e+00 1.323567e+00 1.005132e+00
#[6] 7.125568e-01 4.715582e-01 2.913201e-01 1.680060e-01 9.044791e-02
#[11] 4.545603e-02 2.132573e-02 9.339754e-03 3.818443e-03 1.457325e-03
#[16] 5.192136e-04 1.726851e-04 5.361459e-05 1.553926e-05 4.204333e-06
#[21] 1.061899e-06
Rfun2
不仅避免了显式的for
循环,而且还避免了使用vector
动态增长append
的情况(为此,几乎总是有更好的矢量化替代方案在R中)。
让我们将其与您的原始功能进行比较(修复上面注释中指出的语法错误)
Rfun <- function(d = 5000){
storage <- c()
for(i in seq(0,40,2)) {
d <- d/(1.035^i)
storage <- append(storage,d)
}
storage
}
Rfun(d = 2)
#[1] 2.000000e+00 1.867021e+00 1.627001e+00 1.323567e+00 1.005132e+00
#[6] 7.125568e-01 4.715582e-01 2.913201e-01 1.680060e-01 9.044791e-02
#[11] 4.545603e-02 2.132573e-02 9.339754e-03 3.818443e-03 1.457325e-03
#[16] 5.192136e-04 1.726851e-04 5.361459e-05 1.553926e-05 4.204333e-06
#[21] 1.061899e-06
我们确认Rfun
和Rfun2
给出了相同的结果。