You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言循环递归定义积分函数时闭包取值异常问题求助

R语言循环递归定义积分函数时闭包取值异常问题求助

大家好,我现在在处理一个积分计算任务,核心需求是把一系列g_k(x,s)函数存入列表,方便后续递归调用。

先给出我的参数设置:

n = 500
k = 3
g_1 <- 1
rho <- sqrt( ((k-1)*(n-k))/(k*(n-k+1)) )
tau2 <- (sqrt( n / (k*(n-k+1))))

最开始我手动实现了k=1到4的函数,存入g_lst后运行结果完全正常:

g_lst <- c()

g1 <- function(x,s){ return( 1 ) }
g_lst <- c(g_lst,g1)

g2 <- function(x,s){ return( integrate(function(y){g_lst[[1]](y,s)*(dnorm(y,rho*x,tau2)+dnorm(y,-rho*x,tau2))},0,s)[[1]] ) }
g_lst <- c(g_lst,g2)

g3 <- function(x,s){ return( integrate(function(y){g_lst[[2]](y,s)*(dnorm(y,rho*x,tau2)+dnorm(y,-rho*x,tau2))},0,s)[[1]] ) }
g_lst <- c(g_lst,g3)

g4 <- function(x,s){ return( integrate(function(y){g_lst[[3]](y,s)*(dnorm(y,rho*x,tau2)+dnorm(y,-rho*x,tau2))},0,s)[[1]] ) }
g_lst <- c(g_lst,g4)

但当我尝试用循环把这个过程通用化,生成函数列表g_lst2时,问题出现了:

g_lst2 <- c()

g1 <- function(x,s){ return( 1 ) }
g_lst2 <- c(g_lst2,g1)

for (i in 1:3){
  i <- force(i)
  gk <- function(x,s){ return( integrate(function(y){g_lst[[i]](y,s)*(dnorm(y,rho*x,tau2)+dnorm(y,-rho*x,tau2))},0,s)[[1]] ) }
  force(gk)
  g_lst2 <- c(g_lst2,gk)
}

调用列表里的函数时,所有g_lst2[[2]]、g_lst2[[3]]、g_lst2[[4]]的结果都和g_lst2[[4]]完全一致,而手动定义的g_lst里的函数结果是正常分层的:

g_lst2[[2]](2,2)
#[1] 1.811419

g_lst2[[3]](2,2)
#[1] 1.811419

g_lst2[[4]](2,2)
#[1] 1.811419

g_lst[[2]](2,2)
#[1] 0.7380149

g_lst[[3]](2,2)
#[1] 1.156224

g_lst[[4]](2,2)
#[1] 1.811419

我查了相关讨论,感觉应该用force()函数解决闭包的延迟绑定问题,但我当前的用法好像没起作用,有没有大佬能帮我看看问题出在哪?

备注:内容来源于stack exchange,提问作者crtpritch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 13:53:10