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

嵌套分组iris数据集应用箱线图函数提取异常值报错排查

问题排查:分组嵌套后调用自定义箱线图函数报错object 'Sepal.Length' not found

问题场景

为iris数据集新增colour字段,按colour分组嵌套后,调用自定义箱线图函数bxplt提取异常值时触发错误。

原代码示例

bxplt <- function(DATA, X, Y){
  bxp <- boxplot(data = DATA, {{Y}}~{{X}}, outcex=2)
  cBXP <- bxp[4:5] %>% do.call(cbind.data.frame, bxp)
  return(xBXP)
}
upIris <- iris %>% mutate(colour = rep(c('Red', 'Blue', 'Green'), 50))
upIris %>% group_by(colour) %>% nest(.) %>% mutate(extra_data = map(data, ~ .x %>% bxplt(., Species, Sepal.Length)))

报错信息

Error in mutate():
! Problem while computing extra_data = map(data, ~.x %>% bxplt(., Species, Sepal.Length)).
ℹ The error occurred in group 1: colour = "Blue".
Caused by error:
! object 'Sepal.Length' not found

错误原因

  • 函数调用的管道传递错误:在map的匿名函数中,.x %>% bxplt(., Species, Sepal.Length)的写法导致DATA参数被重复传递(.x和.),使得X参数实际接收的是整个嵌套数据集,而非指定的Species列,进而导致Y参数Sepal.Length无法被正确识别。
  • 自定义函数内部的两处错误:
    1. do.call(cbind.data.frame, bxp)参数错误:管道传递的是bxp[4:5],此处应使用.指代管道输入,而非直接用bxplt变量。
    2. 返回值笔误:函数最后返回xBXP,但实际定义的变量是cBXP。

修正后的代码

# 修正自定义箱线图函数
bxplt <- function(DATA, X, Y){
  bxp <- boxplot(data = DATA, {{Y}}~{{X}}, outcex=2, plot = FALSE) # 添加plot=FALSE避免重复绘图
  cBXP <- bxp[4:5] %>% do.call(cbind.data.frame, .) # 修正do.call的参数引用
  return(cBXP) # 修正返回变量名
}

upIris <- iris %>% mutate(colour = rep(c('Red', 'Blue', 'Green'), 50))

# 修正map中的函数调用逻辑,避免参数传递混淆
upIris %>% 
  group_by(colour) %>% 
  nest() %>% 
  mutate(extra_data = map(data, ~ bxplt(.x, Species, Sepal.Length)))

补充说明

  • 给boxplot添加plot = FALSE参数,避免分组处理时重复绘制箱线图,仅返回异常值相关的统计结果。
  • 调用bxplt时直接传递.x作为DATA参数,不再使用管道传递,彻底避免参数混淆问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:31:04