微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

试图避免带有 if_else 条件的“没有非缺失参数;返回 Inf”警告不起作用

如何解决试图避免带有 if_else 条件的“没有非缺失参数;返回 Inf”警告不起作用

我有以下数据:

df <- data.frame(x = c(1,23,998,9991,9992,1,2,3),group = c(1,2))

df

     x group
1    1     1
2   23     1
3  998     1
4 9991     1
5 9992     1
6    1     2
7    2     2
8    3     2

我现在想分别遍历每个组并保存 c(998,9992) 值范围的最小值。 这适用于第 1 组,因为第 1 组有一些在 c(998,9992) 内的值。第 2 组没有,预计会看到第 2 组的警告:

no non-missing arguments to min; returning Inf

但是,在我的代码中,我添加一个安全网(如果其他条件),我明确告诉代码仅在满足上述值 c(998,9992) 条件时才计算最小值。即使我硬编码只取第 1 组中的最小值,我仍然收到上述错误,我不知道为什么。

library(tidyverse)
df %>%
  group_by(group) %>%
  mutate(test = if_else(group == 1,min(x[x %in% c(998,9992)],na.rm = TRUE),NA_real_))

结果是正确的,这不是问题:

# A tibble: 8 x 3
# Groups:   group [2]
      x group  test
  <dbl> <dbl> <dbl>
1     1     1   998
2    23     1   998
3   998     1   998
4  9991     1   998
5  9992     1   998
6     1     2    NA
7     2     2    NA
8     3     2    NA

但我原以为不会出现以下警告:

Warning message:
Problem with `mutate()` column `test`.
i `test = if_else(...)`.
i no non-missing arguments to min; returning Inf
i The warning occurred in group 2: group = 2.

为什么我仍然收到此警告?有什么方法可以保护代码,使警告不会出现(即仅将其应用于计算最小值将是有效操作的组)?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。