如何在R中的递归函数内定义常量变量?

时间:2017-11-25 04:25:07

标签: r recursion

我想创建计算简单移动平均线(SMA)和指数移动平均线(EMA)的函数。

我的问题在于EMA实施。我想在递归函数中设置一个常量变量,该变量等于其参数之一。

这是我的代码:

#SMA
sma <- function(P,t,n)
{
  return(sum(P[(t-n):(t-1)])/n)
}

#EMA
recursive.ema <- function(P,t,n)
{
  # Here I want to create a constant variable that keeps in memory the first 
  # value of t, i.e. the value of t before the first recursion, so I can use 
  # it as argument of sma function.
  # Something similar to this: tmp <- t (t given from outside the function)

  b <- 2/(n+1)
  if (t == 1)
  {
    return(b*P[1] + (1-b)*sma(P,tmp,n))
  }
  return (b*P[t] + (1-b)*recursive.ema(P,t-1,n))
}

这里P是向量,价格的时间序列,t是向量的索引,我的模型中的时间,n是任何正数,对应于时间t的n个滞后期。

1 个答案:

答案 0 :(得分:0)

这会有用吗?

e <-new.env()
test<-TRUE
assign("test",test,e)

recursive.ema <- function(P,t,n)
{
  test <-get("test",envir=e)
  if (test) {
    assign("t",t,envir=e)
    assign("test",FALSE,envir=e)
  } else {
    t=get("t",envir=e)
  }
  b <- 2/(n+1)
  if (t == 1)
  {
    return(b*P[1] + (1-b)*sma(P,tmp,n))
  }
  return (b*P[t] + (1-b)*recursive.ema(P,t-1,n))
}