R语言integrate函数报错排查:length(lower) == 1 is not TRUE
解决R中嵌套integrate函数的报错问题
问题根源
外层integrate()调用h函数时,会为了计算效率一次性传入向量类型的参数s,但你的g函数(内部调用integrate)要求参数a必须是单个标量。当a是向量时,内层integrate的lower参数长度大于1,直接触发length(lower) == 1 is not TRUE错误。
解决方案
只需让h函数支持向量输入即可,以下两种方法都能实现:
方法1:用Vectorize()包装h
A <- 1 f <- function(a) a^2 g <- function(a,b) integrate(f,a,b)$value h <- Vectorize(function(s) g(s,A)) integrate(h,0,A)
方法2:在h内部用sapply逐个处理输入
A <- 1 f <- function(a) a^2 g <- function(a,b) integrate(f,a,b)$value h <- function(s) sapply(s, function(x) g(x,A)) integrate(h,0,A)
两种方法的核心逻辑一致:将外层传入的向量参数拆分为单个标量,逐个传入内层integrate,确保内层的lower参数始终满足长度为1的要求。
内容的提问来源于stack exchange,提问作者Martingalo
相关产品推荐
相关产品推荐

