r - 如何解决 pmap_dbl 中的 Nan 错误问题,平均在 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
推荐阅读
- r - 在标题中插入图像并将其大小调整为字体大小
- python - 通过对象列表中的每个元素索引查找最小值
- python - 如何将 Tableau .hyper 文件转换为 pandas 数据框?
- php - 如何将我的图像作为 base 64 保存到数据库中
- chart.js - 在条形图上隐藏具有 0 值的 x 轴标签
- sql - 用另一列选择最大数量
- flutter - android studio 无法解析符号“GradleException”
- python - 巨大数据框中的累积唯一词
- javascript - 如果陈述正确,有人可以确认我对此的理解吗
- java - 生产中的错误:“超出 GC 开销限制”