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

R 4.1+函数简写\(x)在purrr::group_map()中无法使用的问题排查

purrr::group_map()使用R 4.1+函数简写语法的问题解决

问题场景

在R 4.1及更高版本中,尝试使用tidyverse推荐的函数简写语法\(x)配合purrr::group_map()时运行失败,但旧的公式写法(~ lm(...))可正常工作。示例代码如下:

library(purrr)

# 旧写法可正常运行
mtcars |>
  group_by(cyl) |>
  group_map(~ lm(mpg ~ disp + hp, data = .x))


# R版本>=4.1的简写写法无法运行
mtcars |>
  group_by(cyl) |>
  group_map(\(x) lm(mpg ~ disp + hp, data = x))

问题原因

group_map()默认会向传入的函数传递两个参数:

  • 第一个参数:分组后的数据集(对应公式写法中的.x)
  • 第二个参数:当前分组的键值(对应公式写法中的.y)

使用公式写法时,purrr会自动处理参数匹配,只调用需要的.x;但使用函数简写\(x)时,函数仅定义了一个参数,而group_map()仍会传递两个参数,导致参数不匹配报错。

解决方法

有两种可行的修正方式:

方式1:明确接收两个参数

即使不需要分组键值,也在函数中定义第二个参数,避免参数不匹配:

mtcars |>
  group_by(cyl) |>
  group_map(\(x, y) lm(mpg ~ disp + hp, data = x))

方式2:使用.keep = FALSE参数

通过该参数让group_map()仅传递分组后的数据集,不传递分组键值:

mtcars |>
  group_by(cyl) |>
  group_map(\(x) lm(mpg ~ disp + hp, data = x), .keep = FALSE)

验证结果

两种修正写法均可正常运行,输出结果与旧公式写法完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 16:46:21