该功能命令背后的逻辑和错误是什么?

时间:2019-03-16 12:11:46

标签: r statistics

我必须将默认值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
}. 

也请有人提供逻辑支持。

谢谢

1 个答案:

答案 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

我们确认RfunRfun2给出了相同的结果。