我正在尝试使用pmap_dbl(purrr程序包)计算平均值(出于测试目的),我得到了NaN。当我传递参数na.rm = TRUE时,结果不应该是数字吗? 使我感到困惑的是,使用求和函数可以正常工作。
library(tidyverse)
airquality%>%select(Ozone,Wind,Temp, Month, Day)%>%
filter(is.na(Ozone))%>%
mutate(Something=pmap_dbl(list(Ozone,Wind,Temp,Month,Day),mean,na.rm=TRUE))%>%
head(3)%>%as_tibble()
Ozone Wind Temp Month Day Something
<int> <dbl> <int> <int> <int> <dbl>
1 NA 14.3 56 5 5 NaN
2 NA 8.6 69 5 10 NaN
3 NA 16.6 57 5 25 NaN
airquality%>%select(Ozone,Wind,Temp, Month, Day)%>%
filter(is.na(Ozone))%>%
mutate(Something=pmap_dbl(list(Ozone,Wind,Temp,Month,Day),sum,na.rm=TRUE))%>%
head(3)%>%as_tibble()
Ozone Wind Temp Month Day Something
<int> <dbl> <int> <int> <int> <dbl>
1 NA 14.3 56 5 5 80.3
2 NA 8.6 69 5 10 92.6
3 NA 16.6 57 5 25 104.
答案 0 :(得分:1)
问题是mean()
仅接受单个值向量,但是pmap()
单独传递每个值(在这种情况下,实际上是长度为1的向量),因此要使其正常工作,必须先将它们串联。在您的尝试中,mean()
仅对传递的第一个值(NA
)执行,而其他值被视为函数的其他参数,因此在这种情况下有效地被忽略,结果为{{1 }}。另一方面,NaN
可以接受任意数量的单独传递的矢量,这就是为什么它起作用但sum()
却无效的原因。
mean()