[英]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.