如何解决pmap_dbl中的Nan错误以及r平均值的问题

时间:2020-05-21 11:31:15

标签: r tidyverse nan mean purrr

我正在尝试使用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. 

1 个答案:

答案 0 :(得分:1)

问题是mean()仅接受单个值向量,但是pmap()单独传递每个值(在这种情况下,实际上是长度为1的向量),因此要使其正常工作,必须先将它们串联。在您的尝试中,mean()仅对传递的第一个值(NA)执行,而其他值被视为函数的其他参数,因此在这种情况下有效地被忽略,结果为{{1 }}。另一方面,NaN可以接受任意数量的单独传递的矢量,这就是为什么它起作用但sum()却无效的原因。

mean()