使用pmap_dbl计算均值异常:求和正常但均值仅返回第一列值求助
为什么
pmap_dbl调用mean只返回第一列值,而sum正常? 问题原因
pmap系列函数的核心逻辑是把数据框的每一行拆成多个独立参数传递给目标函数,这也是它和map系列的关键区别:
sum本身支持接收多个数值参数(比如sum(50,10,-10)),所以pmap_dbl(., sum)会把每行的x、y、z三个值分别传入sum,自然能算出每行的总和。- 但
mean的参数逻辑完全不同:它的第一个参数x要求是一个待计算均值的向量,后续的trim、na.rm是辅助控制参数。当你直接写pmap_dbl(., mean)时,pmap会把每行的x传给mean的x参数,y传给trim,z传给na.rm——此时mean实际只对单个值(x列的数值)计算均值,结果当然等于x本身。
解决方法
方法1:用专门的行均值函数(推荐,更高效)
data %>% mutate(mean = rowMeans(., na.rm = TRUE))
方法2:在pmap中打包参数为向量
把每行的所有参数合并成一个向量后再传给mean:
data %>% mutate(sum = pmap_dbl(., sum), mean = pmap_dbl(., ~mean(c(...))))
内容的提问来源于stack exchange,提问作者Breeze
相关产品推荐
相关产品推荐

