我的R for循环求一个序列有什么问题?

时间:2018-09-10 23:40:27

标签: r loops for-loop sum

这是我执行循环的函数:

answer = function(a,n) {
  for (k in 0:n) {
    x =+ (a^k)/factorial(k)
    }
  return(x)
  }

answer(1,2)应该返回2.5,因为它是

的计算值
  

1 ^ 0/0! + 1 ^ 1/1! + 1 ^ 2/2! = 1 +1 + 0.5 = 2.5

但是我明白了

answer(1,2)
#[1] 0.5

看起来它未能累计所有三个项,并且每次都仅存储最新值。 +=无法正常工作,因此我使用了=+,但仍然不正确。谢谢。

1 个答案:

答案 0 :(得分:5)

answer = function(a,n) {
  x <- 0  ## initialize the accumulator
  for (k in 0:n) {
    x <- x + (a^k)/factorial(k)  ## note how to accumulate value in R
    }
    return(x)
  }

answer(1, 2)
#[1] 2.5

有“矢量化”解决方案:

answer = function(a,n) {
  x <- a ^ (0:n) / factorial(0:n)
  return(sum(x))
  }

在这种情况下,您无需初始化任何内容。 R将在<-sum之后分配内存。

您正在使用泰勒展开式近似exp(a)。请参阅主题上的this Q & A。您可能需要特别注意我的回答中提到的“数值收敛”问题。