函数内的计算未正确迭代 (R)

Calculation within function not iterating correctly (R)

如果我假设每年的增幅相同,我正在尝试编写一个函数来计算我每年的薪水增幅。

我已经尝试了下面的一些代码,但它只是多次输出计算的第一次迭代。

这是我的函数:

salary_func=function(a,b){
  for(i in 1:a){
    c=b+(b*0.035)
    print(c)
  }
}

salary_func(5,100000)

第一个参数应该是我想 "forecast" 退出的年数,第二个参数应该是起薪。所以,我希望看到如下输出:

[1] 103500
[1] 107122.5

依此类推,直到第 a 个参数。

但它只是显示:

[1] 103500
[1] 103500

我错过了什么?

计算的 return 值必须重新分配给 b,以便它发生变化。否则 for 循环计算相同的值 a 次。

salary_func <- function(a, b){
  for(i in seq_len(a)){
    b <- b + (b*0.035)
    print(b)
  }
}

salary_func(5, 100000)
#[1] 103500
#[1] 107122.5
#[1] 110871.8
#[1] 114752.3
#[1] 118768.6

另一种解决方案是利用 R 的矢量化运算以及该函数计算复合增长的事实。

版本 2 不打印值。 return是他们。

salary_func2 <- function(a, b){
    b*(1 + 0.035)^seq_len(a)
}

salary_func2(5, 100000)
#[1] 103500.0 107122.5 110871.8 114752.3 118768.6

您需要完全消除 c(只需使用 b)或 初始化 c,然后更新 c相对于其先前的值,而不是 b 的原始值。以下作品:

salary_func=function(a,b){
  c = b
  for(i in 1:a){
    c=c+(c*0.035)
    print(c)
  }
}

例如:

> salary_func(5,100000)
[1] 103500
[1] 107122.5
[1] 110871.8
[1] 114752.3
[1] 118768.6

话虽如此,并不是说 打印 而不是 returns 值的函数不是很有用。