这是我的函数循环:
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
看起来它无法累积所有三个术语,每次只存储最新值。 +=
不起作用所以我使用=+
但它仍然不对。谢谢。
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主题。您可能需要特别注意我的答案中提到的“数值收敛”问题。