You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dplyr::case_when计算行最小值时,全NA行仍触发min警告

行最小值计算时的警告问题

我需要计算数据框的行最小值,同时处理目标列全为NA的行,代码如下:

library(dplyr)

testDf <- tibble(a = 1:4,
                 b = c(NA, 5:7),
                 c = c(NA, 8, NA, 10),
                 d = c(NA, 11:13)
                 ) %>%
  rowwise() %>%
  mutate(e = case_when(all(is.na(c_across(b:d))) ~ NA_integer_,
                       .default = min(c_across(b:d), na.rm=TRUE))
         ) %>%
  ungroup()

运行后出现警告:

Caused by warning in min(): ! no non-missing arguments to min; returning Inf

但输出结果符合预期:

testDf

# A tibble: 4 × 5
      a     b     c     d     e
  <int> <int> <dbl> <int> <dbl>
1     1    NA    NA    NA    NA
2     2     5     8    11     5
3     3     6    NA    12     6
4     4     7    10    13     7

列e的第一行为NA,第三行为6,没有Inf值。我尝试过把.default =替换为TRUE ~和!all(is.na(c_across(b:d))) ~,也将NA_integer_替换为NA_real_,但仍然出现相同警告。

我理解case_when中的.default仅在前一条件返回FALSE或NA时生效,测试显示第一行的all(is.na(c_across(b:d)))为TRUE,其余为FALSE,理论上.default对应的min操作应该跳过第一行:

testDf %>%
  rowwise() %>%
  mutate(f = all(is.na(c_across(b:d))))

# A tibble: 4 × 6
# Rowwise: 
      a     b     c     d     e f    
  <int> <int> <dbl> <int> <dbl> <lgl>
1     1    NA    NA    NA    NA TRUE 
2     2     5     8    11     5 FALSE
3     3     6    NA    12     6 FALSE
4     4     7    10    13     7 FALSE

我不想抑制警告,且结果本身没有问题,但无法确定问题根源,也不确定这是否是个bug。

内容的提问来源于stack exchange,提问作者bcarothers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 05:33:20