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

使用purrr映射dplyr::select时R崩溃的问题求助

问题原因与解决方法

你遇到的段错误(segfault)是因为在mutate里错误地使用了公式写法~map(...)——~是用来创建公式对象的,通常是在purrr函数内部作为.f参数的简写(比如map(.x, ~do_something(.x))),但直接把~map(...)放在mutate的赋值右侧,会导致内部处理时出现内存映射错误,进而让R崩溃。

正确的两种写法

你只需要调整mutate里的map调用方式,以下两种写法都能正常运行:

写法1:利用map的参数传递特性

直接把select作为map的第二个参数,后面跟上select的参数(移除mpg列),map会自动把data列里的每个嵌套数据框作为第一个参数传给select:

library(tidyverse)
mtcars %>% 
  group_by(cyl) %>% 
  nest() %>% 
  mutate(data2 = map(data, dplyr::select, -mpg))

写法2:在map内部使用公式简写

如果习惯用公式写法,要把~放在map的函数参数位置,用.x指代每个迭代的嵌套数据框:

library(tidyverse)
mtcars %>% 
  group_by(cyl) %>% 
  nest() %>% 
  mutate(data2 = map(data, ~dplyr::select(.x, -mpg)))

写法3(R 4.1+):使用匿名函数

如果你用的是R 4.1及以上版本,也可以用更直观的匿名函数写法:

library(tidyverse)
mtcars %>% 
  group_by(cyl) %>% 
  nest() %>% 
  mutate(data2 = map(data, \(df) select(df, -mpg)))

验证结果

运行任意一种写法后,你都会得到预期的三列数据框:

  • cyl:分组的气缸数
  • data:原始的嵌套数据框
  • data2:移除了mpg列的嵌套数据框

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:22:48