如何使用 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
我正在尝试计算(出于测试目的)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