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

如何在purrr链式操作中对.x执行filter后再传入~定义的函数

问题原因

你报错的核心是TestData为列表类型,其内部的每个元素才是可被filter处理的数据框,你直接对列表调用dplyr的filter方法,自然触发类型不匹配的报错。

解决方案

你只需要在purrr传入的匿名函数中,先完成单份数据的过滤,再做后续计算即可,用大括号包裹多步逻辑就能实现无重复代码:

MAPE180 = map_dbl(TestData, ~{
  # 仅执行一次过滤操作,将结果存为临时变量复用
  filtered_data <- .x %>% filter(TENURE == 180)
  Metrics::mape(filtered_data$CUMULATIVE_AMOUNT, filtered_data$Prediction)
})

如果偏好更简洁的链式写法,也可以借助with()函数简化字段调用:

MAPE180 = map_dbl(TestData, ~.x %>% 
  filter(TENURE == 180) %>% 
  with(Metrics::mape(CUMULATIVE_AMOUNT, Prediction))
)

两种写法的运行结果和你最初的可运行代码完全一致,且消除了重复的过滤逻辑。

内容的提问来源于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:06:06