使用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
相关产品推荐
相关产品推荐

