【问题标题】:Calculation within function not iterating correctly (R)函数内的计算未正确迭代 (R)
【发布时间】:2019-07-21 19:48:49
【问题描述】:

如果我假设每年的增长百分比相同,我正在尝试编写一个函数来计算我每年的工资增长。

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

这是我的功能:

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

salary_func(5,100000)

第一个参数应该是我想“预测”出来的年数,第二个参数应该是起薪。所以,我想看到这样的输出:

[1] 103500
[1] 107122.5

以此类推,直到第一个参数。

但它只是写着:

[1] 103500
[1] 103500

我错过了什么?

【问题讨论】:

    标签: r loops iteration calculation


    【解决方案1】:

    计算的返回值必须分配回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 不打印这些值。它返回它们。

    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可能是最好的方法。
    【解决方案2】:

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

    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
    

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

    【讨论】:

      猜你喜欢
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 2021-06-07
      • 2023-04-09
      相关资源
      最近更新 更多