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

为何case_when语句中第二条代码返回NA?求技术解答

为什么第二条case_when语句返回NA?

这是浮点数精度问题导致的:

  • 计算机用二进制存储浮点数,像0.1这类十进制小数无法被二进制精确表示,属于无限循环的二进制小数。
  • 计算as.numeric("82")*0.1时,实际得到的是一个接近8.2但存在微小偏差的数值(用高精度打印可验证:print(as.numeric("82")*0.1, digits=20)会输出8.1999999999999992895)。
  • 这个偏差让==的严格比较不成立,而case_when在所有条件都不满足时,默认返回NA。

解决方法

可以用以下方式规避该问题:

  1. 使用dplyr::near()函数(专门用于浮点数近似比较):
case_when(near(as.numeric("82")*0.1, 8.2) ~ TRUE)
  1. 转换为整数运算,避开浮点数误差:
case_when(as.numeric("82") == 8.2 * 10 ~ TRUE)
  1. 设置精度阈值进行模糊比较:
case_when(abs(as.numeric("82")*0.1 - 8.2) < 1e-10 ~ TRUE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:52:08