R:函数内的递归函数

时间:2015-01-19 11:05:41

标签: r

对于我的似然函数,分母由每个观察的递归函数recurseG定义(1:N)。

如果我循环遍历该功能,那么每一件事都可以。

当我将程序嵌入到我的主(可能性)函数中时,事情变得奇怪了。 xG,即recurseG的输入,丢失了。从来没有见过,任何想法是什么问题?欢呼声。

recurseG <- function(T,S){ # xG externally defined
  if (S==0) return(1)
  if (S>T) return(0)
  else return (Recall(T-1, S) + Recall(T-1, S-1)*xG[T])
}

# define for replication
N=10; T=3
x <- matrix(rnorm(N*T),N,T)
tG <- rep(T,N)
sG <- sample(rep(0:T,T), N)

## standalone

denom <- rep(NA, N)
for (i in 1:N){
  xG <- x[i,]
  denom[i] <- recurseG(tG[i], sG[i])
} 

## inside function

rm(xG) # will produce "not found"

fout <- function(x){
  denom <- rep(NA, N)
  for (i in 1:N){
    xG <- x[i,]
    denom[i] <- recurseG(tG[i], sG[i])
  } 
  return(denom)
}

denom
fout(x)

1 个答案:

答案 0 :(得分:1)

问题与递归无关。您只需在<{1}}函数中定义<{1}} 。但是,xG外面定义fout的可见性受限于其定义的范围,因此在recurseG中不可见。

要解决此问题,只需将xG传递给recurseG作为参数:

xG