簡體   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