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

R语言使用mutate+case_when调用Closest处理全NA行时报错如何解决?

问题原因

报错的核心触发点是全NA行(示例中的第4行)的三个accident字段无任何有效值:

  • 调用pmax/pmin处理全NA输入时,会触发「无有效参数返回Inf」的警告
  • 调用Closest处理全NA输入时会返回长度为0的结果,不符合rowwise下mutate要求每行返回1个标量的规则,直接抛出长度不匹配错误
修正方案

可以直接简化原有冗余的分支判断逻辑,提前对每行的accident值做全NA校验,无有效值时直接返回NA即可,修正后代码如下:

library(DescTools)
library(dplyr)

df <- data.frame(id=1:4, accident1=c(-1,3,4, NA), accident2=c(100, -2, NA, NA), accident3=c(-3,1,2, NA))

df %>%
  rowwise() %>%
  mutate(magic = {
    # 提取当前行所有事故间隔值
    interval_vals <- c(accident1, accident2, accident3)
    # 全NA直接返回NA,否则计算最接近0的值
    if (all(is.na(interval_vals))) {
      NA_real_
    } else {
      Closest(interval_vals, 0, na.rm = TRUE)
    }
  }) %>%
  ungroup()
输出结果

运行后得到符合预期的结果,全NA行的magic值自动返回NA:

id accident1 accident2 accident3 magic
  <int>     <dbl>     <dbl>     <dbl> <dbl>
1     1        -1       100        -3    -1
2     2         3        -2         1     1
3     3         4        NA         2     2
4     4        NA        NA        NA    NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:54:07