繁体   English   中英

R:函数内的递归函数

[英]R: Recursive function within function

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

如果我遍历函数,一切正常。

当我将程序嵌入到主要功能(似然性)中时,事情变得很奇怪。 作为recurseG的输入的xG丢失了。 以前从未见过,有什么想法是什么问题? 干杯。

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)

该问题与递归无关。 您只需 fout函数中定义xG即可。 但是, recurseG在其外部定义。 xG的可见性recurseG定义范围的限制,因此在recurseG不可见。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM