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

如何在dplyr管道链中从lm线性模型提取调整R²值

报错原因

  1. pull()是dplyr专为数据框、tibble设计的列提取函数,summary(lm())返回的是summary.lm类的列表对象,没有对应的pull方法,因此第一种写法报错。
  2. 管道运算符默认会把左侧输出作为右侧函数的第一个参数,x %>% summary()$adj.r.squared会被解析为$(summary(x), summary(), adj.r.squared),相当于给$运算符传入了3个参数,不符合参数要求,因此第二种写法报错。

实现方案

方案1:使用purrr::pluck提取列表元素(适配管道+map场景)

pluck是purrr提供的通用列表元素提取函数,完美适配管道语法和列表列映射场景:

# 单个模型提取调整R²
x %>% summary() %>% pluck("adj.r.squared")

# 列表列场景下结合map_dbl批量提取
library(tidyverse)
plist %>% 
  mutate(adj_r2 = map_dbl(lm, ~.x %>% summary() %>% pluck("adj.r.squared")))

方案2:用大括号明确指代管道输出

如果不想额外使用提取函数,可以用大括号包裹操作,明确.指代管道传递的结果:

# 单个模型提取调整R²
x %>% summary() %>% {.$adj.r.squared}

# 列表列批量提取
plist %>% 
  mutate(adj_r2 = map_dbl(lm, ~summary(.x)$adj.r.squared))

方案3:用broom包标准化模型输出(tidyverse生态推荐用法)

broom包是tidyverse生态中专门用于将模型输出转换为标准数据框的工具,转换后可以直接使用dplyr的所有操作函数:

library(broom)

# 单个模型提取调整R²
x %>% glance() %>% pull(adj.r.squared)

# 列表列批量提取
plist %>% 
  mutate(adj_r2 = map_dbl(lm, ~glance(.x)$adj.r.squared))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:09:02