如何在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
相关产品推荐
相关产品推荐

