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

How to resolve the issue with Nan error in pmap_dbl with average in r

我正在尝试计算(出于测试目的)pmap_dbl(purrr 包)的平均值,我得到了 NaN。当我传递参数 na.rm=TRUE 时,结果不应该是数字吗? 令我困惑的是,使用 sum 函数可以正常工作。

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. 

问题是 mean() 只接受单个值向量,但 pmap() 单独传递每个值(在本例中实际上是长度为 1 的向量),因此要使其正常工作,它们需要首先串联。在您的尝试中,mean() 仅对传递的第一个值(NA)执行,其他值被视为函数的其他参数,因此在这种情况下实际上被忽略了,结果是 NaN.另一方面,sum() 可以单独传递任意数量的向量,这就是它起作用但 mean() 不起作用的原因。

airquality %>%
  select(Ozone, Wind, Temp, Month, Day) %>%
  filter(is.na(Ozone)) %>%
  mutate(Something = pmap_dbl(list(Ozone, Wind, Temp, Month, Day), function(...)
    mean(c(...), na.rm = TRUE))) %>%
  head(3) %>% 
  as_tibble()

# A tibble: 3 x 6
  Ozone  Wind  Temp Month   Day Something
  <int> <dbl> <int> <int> <int>     <dbl>
1    NA  14.3    56     5     5      20.1
2    NA   8.6    69     5    10      23.2
3    NA  16.6    57     5    25      25.9