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