R语言如何筛选numeric类数值向量中值为整数的元素
R 数值向量整数值筛选实现
你不需要复杂依赖,基础R就可以实现符合需求的函数,核心逻辑是判断数值本身和取整后的值的差是否在浮点数允许的误差范围内,规避浮点数计算精度导致的误判。
自定义函数实现
integerFunction <- function(x, tol = .Machine$double.eps^0.5) { abs(x - round(x)) < tol }
逻辑说明
- 没有直接用
x == round(x)、x %% 1 == 0这类写法,是因为R存储双精度浮点数存在精度误差,比如0.1 * 10计算结果和1存在极小的差值,不加容差会把实际是整数的数值误判为非整数 - 容差参数
tol默认取R内置双精度精度值的平方根,是统计计算里常用的合理阈值,你也可以根据自己的精度需求调整 - 注意和内置函数
is.integer()做区分:is.integer()判断的是向量的存储类型,和你需要的「判断数值本身是否为整数」逻辑完全不同
效果测试
用你给出的示例向量运行:
vec <- c(1.0, 5.0, 5.3, 10.0, 2.5) integerFunction(vec)
运行输出完全匹配预期:
[1] TRUE TRUE FALSE TRUE FALSE
现有包可选方案
如果你不想自定义函数,也可以直接用成熟R包的现成实现:
dplyr::is_integerish():可以直接判断数值是否为整数值,默认也做了浮点数容差处理checkmate::is_integerish():和上面的函数逻辑类似,额外支持自定义更多判断规则
内容的提问来源于stack exchange,提问作者llewmills
相关产品推荐
相关产品推荐

