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

lapply生成的nlme::gls模型传入piecewiseSEM的psem运行报错

问题原因

报错根源是lapply匿名函数生成的gls模型对象中,保存的调用语句(call)里的data参数指向匿名函数的临时变量i,函数运行结束后临时变量对应的环境销毁,piecewiseSEM的psem函数解析模型调用提取数据时无法识别该变量,最终触发类型错误。
直接赋值生成的model3、model4不存在这个问题:它们的调用语句中data参数指向全局环境中存在的empty_list[[1]],psem可以正常解析提取数据。

解决方法

修改lapply内的拟合逻辑,在模型生成后手动修正调用语句中的data参数为实际数据集即可,修改后的建模代码如下:

# 修正后的lapply建模代码
model1 <- lapply(empty_list, FUN = function(i) {
  mod <- nlme::gls(disp ~  wt,
            correlation = corHaversine(form=~lon+lat,mimic="corSpher"),
            data = i)
  # 手动修正call中的data参数为实际数据集
  mod$call$data <- i
  return(mod)
})
model2 <- lapply(empty_list, FUN = function(i) {
  mod <- nlme::gls(wt ~  hp,
            correlation = corHaversine(form=~lon+lat,mimic="corSpher"),
            data = i)
  mod$call$data <- i
  return(mod)
})

# 后续psem调用可正常运行
model1.2 <- psem(model1[[1]], model2[[1]], data = empty_list[[1]])
summary(model1.2, .progressBar = F, standardize = "scale")

该方案同样适配后续对接parLapply实现并行计算的需求,仅需在并行节点的拟合逻辑中加入修正call的步骤即可正常运行。

内容的提问来源于stack exchange,提问作者antR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 13:45:03