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

tidyverse/dplyr环境中gamlss报object '.' not found错,lm/gam/glm正常

嘿,我遇到过类似的gamlss和dplyr配合的坑!来给你捋捋问题出在哪以及怎么解决~

问题根源

你遇到的object '.' not found错误,本质是gamlss的公式解析机制和lm/glm/gam不一样:后三者在调用时会自动继承当前的调用环境(也就是dplyr/map迭代里的.临时数据对象),但gamlss对数据来源的要求更严格,不会自动识别.,必须你明确指定数据参数。

具体解决方法

这里有几种靠谱的解决思路,按推荐程度排序:

1. 显式指定data = .(最直接)

在gamlss调用里加上data = .,明确告诉它用当前迭代的分组数据:

library(tidyverse)
library(gamlss)

# 先构造你的嵌套分组数据(示例用mtcars)
mtcars %>%
  group_by(cyl) %>%
  nest() %>%
  # 关键是在gamlss里加上data = .
  mutate(model = map(data, ~gamlss(mpg ~ wt, data = ., family = NO)))

2. 改用完整匿名函数替代公式简写

如果公式简写的环境继承还是有问题,换成更明确的匿名函数写法,直接把数据参数传递给gamlss:

mtcars %>%
  group_by(cyl) %>%
  nest() %>%
  mutate(model = map(data, function(dat) {
    gamlss(mpg ~ wt, data = dat, family = NO)
  }))

这种写法完全避开了公式简写的环境歧义,稳定性更高。

3. 排查变量与环境冲突

偶尔也可能是全局环境里有重名变量干扰,导致gamlss没找到分组数据里的变量。这时候可以检查公式里的变量是否都在嵌套的data对象中,或者暂时清空全局环境的同名变量测试。

为什么lm/glm/gam能正常运行?

lm系列(包括gam)的公式解析器会自动在调用环境中查找数据,当你用~lm(mpg~wt)时,它会默认从.这个临时环境里取数据;但gamlss的设计逻辑更偏向于必须显式声明数据源,所以不写data = .的话,它就找不到.对象了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:03:12