在dplyr::filter中替代==以适配浮点数的方案
适配浮点数的dplyr筛选优化方案
使用
dplyr::near()函数(推荐)
这是dplyr专为浮点数相等判断设计的函数,会自动处理浮点数精度误差,默认容差为.Machine$double.eps^0.5,也可自定义精度:# 默认容差 data_lg <- data %>% filter(near(a_ov_t, target_at + 0.1)) # 自定义容差(比如1e-8) data_lg <- data %>% filter(near(a_ov_t, target_at + 0.1, tol = 1e-8))按指定精度取整后判断
如果你的数据精度固定(比如保留1位小数),可以用round()统一精度后再比较,避免依赖倍数计算:data_lg <- data %>% filter(round(a_ov_t, 1) == round(target_at + 0.1, 1))区间范围筛选
手动设定极小的容差区间,直接判断数值是否落在目标值附近:tolerance <- 1e-8 target_val <- target_at + 0.1 data_lg <- data %>% filter(a_ov_t > target_val - tolerance, a_ov_t < target_val + tolerance)
这些方案比直接乘以整数的方法更通用:near()函数适配绝大多数浮点数场景,取整法适合精度固定的业务场景,区间筛选则能让你完全控制精度范围,避免因数值位数变化而调整代码。
内容的提问来源于stack exchange,提问作者Nate
相关产品推荐
相关产品推荐

