pmap_dbl与lambda函数配合失效问题求助
问题原因及解决办法
问题原因
pmap_dbl的工作逻辑是把每行选中的多列值拆成多个独立参数传递给目标函数:
- 直接传入
sum时,sum本身支持接收任意数量的位置参数(比如sum(328, 133, 89)),能正常处理每行的三个数值。 - 而用
\(x) sum(x)时,这个lambda函数只定义了一个参数x,但pmap_dbl每次会传入3个参数(对应选中的3列),函数无法处理多余的参数,因此报出“存在未使用的参数”错误。
解决办法
方式1:让lambda函数接收所有传入参数
用...捕获所有参数,再传给sum:
country_df |> mutate(sum = pmap_dbl(pick(1:3), \(...) sum(...)))
方式2:将多参数合并为单个向量
把所有传入的参数合并成一个向量后再求和:
country_df |> mutate(sum = pmap_dbl(pick(1:3), \(...) sum(c(...))))
更简洁的替代方案
如果只是实现按行求和,用dplyr的rowwise+c_across会更直观:
country_df |> rowwise() |> mutate(sum = sum(c_across(1:3))) |> ungroup()
内容的提问来源于stack exchange,提问作者Ramakrishna S
相关产品推荐
相关产品推荐

