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

如何获取不继承模型对象属性的纯净tibble?

解决marginaleffects结果体积过大无法导出的问题

核心问题是marginaleffects生成的结果对象(包括summary()输出)携带了大量附加属性(比如原模型、用于计算的newdata等),这些属性里藏着你的数百万观测值,导致对象体积爆炸。要得到纯净的结果表格,直接剥离这些属性就行,具体方法如下:

方法一:手动构造纯净Tibble(最彻底)

直接提取你需要的核心结果字段,重新构造一个全新的Tibble,完全避开原对象的附加属性:

library(marginaleffects)
library(tidyverse)

mod <- lm(mpg ~ as.factor(cyl) * hp + wt, data = mtcars)

avg_slopes <- avg_slopes(
  mod,
  variables = "hp",
  by = "cyl",
  newdata = datagridcf(cyl = c(4, 6, 8)))

# 提取summary里的核心数据,手动构造纯净tibble
summary_result <- summary(avg_slopes)
clean_tibble <- tibble(
  气缸数 = summary_result$cyl,
  变量 = summary_result$term,
  估计值 = summary_result$estimate,
  标准误 = summary_result$std.error,
  t值 = summary_result$statistic,
  p值 = summary_result$p.value
)

# 检查体积,此时已经是纯净的小对象
sort(sapply(ls(), function(x) format(object.size(get(x)), unit = 'auto')))

方法二:转普通数据框再转回Tibble(更快捷)

利用普通数据框不会保留marginaleffects特殊属性的特点,先转成数据框再转回Tibble,同时保留你需要的列:

clean_tibble <- avg_slopes %>%
  summary() %>%
  # 只保留你需要的列,按需调整
  select(cyl, term, estimate, std.error, statistic, p.value) %>%
  as.data.frame() %>% # 转普通数据框,剥离所有附加属性
  as_tibble() # 转回Tibble格式

为什么之前的方法没用?

你之前用tibble(summary(avg_slopes))只是把summary结果包了一层,但原对象的附加属性(比如model、newdata)依然存在,这些才是体积大的元凶。上面两种方法都是直接丢弃这些附加属性,只保留可视化/分析需要的结果数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:17:09