R 递归函数返回NA

R 递归函数返回NA,r,function,recursion,R,Function,Recursion,我正试图编写一个递归函数来计算以下内容 其中T是数据集中的行数,α,l0是预定义的 为此,我尝试编写一个递归函数,但它返回NA calc_sum <- function(y, a, l){ return(a*(y[nrow(y),])+ (1-a)*calc_sum(y[1:(nrow(y)-1),], a, l)) } calc_sum递归在这里并不能提供非常自然的解决方案。事实上,该方程转化为R作为一个线性方程: sum(a * (1 - a) ^ (0 : (T -

我正试图编写一个递归函数来计算以下内容

其中T是数据集中的行数,α,l0是预定义的

为此,我尝试编写一个递归函数,但它返回NA

calc_sum <- function(y, a, l){
    return(a*(y[nrow(y),])+ (1-a)*calc_sum(y[1:(nrow(y)-1),], a, l))
  }

calc_sum递归在这里并不能提供非常自然的解决方案。事实上,该方程转化为R作为一个线性方程:

sum(a * (1 - a) ^ (0 : (T - 1)) * y[seq(T, 1)]) + (1 - a) ^ T * l
使成为一种功能:

mysum = function (y, a, l) {
    T = length(y)
    sum(a * (1 - a) ^ (0 : (T - 1)) * y[seq(T, 1)]) + (1 - a) ^ T * l
}

使用向量(不是data.frame!)调用。

递归在这里并不能提供非常自然的解决方案。事实上,该方程转化为R作为一个线性方程:

sum(a * (1 - a) ^ (0 : (T - 1)) * y[seq(T, 1)]) + (1 - a) ^ T * l
使成为一种功能:

mysum = function (y, a, l) {
    T = length(y)
    sum(a * (1 - a) ^ (0 : (T - 1)) * y[seq(T, 1)]) + (1 - a) ^ T * l
}

使用向量(不是data.frame!)调用。

了解
y
是否包含任何
NA
s可能会有所帮助。事实上,查看所有的数据集会很有帮助。以及您的预期输出。我也不知道为什么你的函数需要递归。@Limey用数据和预期的输出更新了这个问题。我不确定实现函数的最有效方法是什么,因此使用了递归函数。我很惊讶你的函数竟然会返回,因为递归目前缺少一个基本情况-它应该不断地调用自己(直到R中断)。此外,我喜欢递归。真的。只要有意义,我就用它。但我觉得在这里没有什么意义。你的方程可以非常直接地用R写成:
sum(a*(1-a)^(0:(T-1))*y[seq(T,1)]+(1-a)^T*l
。知道
y
是否包含任何
NA
s可能会有帮助。事实上,查看所有的数据集会很有帮助。以及您的预期输出。我也不知道为什么你的函数需要递归。@Limey用数据和预期的输出更新了这个问题。我不确定实现函数的最有效方法是什么,因此使用了递归函数。我很惊讶你的函数竟然会返回,因为递归目前缺少一个基本情况-它应该不断地调用自己(直到R中断)。此外,我喜欢递归。真的。只要有意义,我就用它。但我觉得在这里没有什么意义。你的方程可以非常直接地写成R:
sum(a*(1-a)^(0:(T-1))*y[seq(T,1)]+(1-a)^T*l