如何在tibble指定列存储函数与输入数据,逐行迭代执行?
问题原因
- 首次调用
map报错的核心问题是:map的第二个参数.f需要传入单个函数/公式对象,但你传入的是包含2条公式的整个summarise_func列表列,映射逻辑不匹配,无法对应到每行数据。 - 后续尝试转换函数报错「无法将列表转换为函数」的原因是:你在匿名函数中直接调用
rlang::as_function(summarise_func),每次迭代都会把整个summarise_func列表列传入转换接口,自然无法把列表转成单个函数。
解决方案
你需要同时迭代「筛选后的数据列」和「聚合函数字段列」,取同一行的两个值配对运算,用map2即可实现:
trb_1 %>% mutate(dat_summarised = map2( .x = dat_selected, .y = summarise_func, .f = ~ rlang::as_function(.y)(.x) ))
逻辑说明
map2会逐行遍历dat_selected和summarise_func两个列表列,保证每次取同一行的数据和对应公式- 每次迭代时,先把当前行的单条公式
.y通过rlang::as_function转成可执行的函数,再传入当前行的筛选后数据.x执行,即可得到对应聚合结果
运行后得到的dat_summarised列和你预期的输出完全一致。
内容的提问来源于stack exchange,提问作者Emman
相关产品推荐
相关产品推荐

