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

pryr::object_size()处理嵌套tibble或data frame是否存在兼容性问题

报错原因

这个报错不是单纯由嵌套数据框/ tibble 结构导致,根源是你在嵌套列表列中存储了lm线性回归模型对象:lm返回的结果会默认携带拟合时的环境引用,pryr::object_size递归遍历对象计算内存时无法正确处理这类带特殊绑定的环境引用,才会抛出bad binding access错误。你可以单独测试pryr::object_size(lm(log(y)~log(x), data=DT)),也会触发完全相同的报错,和外层是不是嵌套结构没有关系。

可行解决方案

方案1:替换为R内置的内存计算函数

R内置的utils::object.size()对这类环境引用的兼容性更好,直接替换函数调用即可正常计算:

# 运行无报错,正常返回内存占用大小
object.size(testTabe(DT))
object.size(testTib(DT))

方案2:清理lm对象的冗余环境绑定

如果你需要保留pryr::object_size的共享内存统计、自动适配单位等特性,可以在生成模型时主动清除不必要的环境引用:

# 调整生成model列的代码
model = tryCatch({
  mod <- lm(logY ~ logX, data=data[[1]])
  # 清除模型中携带的不需要的环境绑定与冗余数据
  mod$model <- NULL
  mod$terms <- NULL
  mod$qr$qr <- NULL
  mod
}, error=function(cond) NA) %>% list()

修改后再调用pryr::object_size就不会触发报错。

方案3:仅存储需要的模型结果

如果你不需要后续调用整个模型对象做预测等操作,可以在生成嵌套列时仅提取你需要的模型参数(比如回归系数、R²、p值等)存储为普通列表/数据框,不要直接存储完整lm对象,从根源上避免环境引用的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:24:05