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

函数内的计算未正确迭代(R),r,loops,iteration,calculation,R,Loops,Iteration,Calculation,我试图写一个函数来计算我的工资增长,如果我假设每年的增长率相同 我已经尝试了下面的一些代码,但它只输出了计算的第一次迭代数次 以下是我的功能: 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 依此类推,直到

我试图写一个函数来计算我的工资增长,如果我假设每年的增长率相同

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

以下是我的功能:

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
依此类推,直到第a个论点

但它只是写着:

[1] 103500
[1] 103500

我遗漏了哪一小段?

计算的返回值必须分配回b,以便它发生变化。否则,for循环每次计算相同的值

另一个解决方案是利用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

计算的返回值必须重新分配给b,以使其改变。否则,for循环每次计算相同的值

另一个解决方案是利用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,只需使用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

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

您需要完全消除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
话虽如此,并不是说打印而不是返回值的函数不是很有用。

简单地去掉c可能是最好的方法。简单地去掉c可能是最好的方法。