R语言中如何验证向量所有元素是否均等于某一标量
R中判断向量所有元素均等于指定标量的实现方法
有内置函数可以直接实现这个需求,最通用、效率最高的方案是使用基础包自带的all()函数,它的核心作用就是校验输入的逻辑向量中是否所有元素都为TRUE,完全匹配你说的判断场景。
基础使用
针对你给出的示例向量:
v <- c(1,1,1,1,1)
直接组合相等判断和all()函数即可:
all(v == 1) # 运行返回 [1] TRUE
只要向量里存在任意一个不等于目标标量的元素,结果就会返回FALSE:
v2 <- c(1,1,2,1,1) all(v2 == 1) # 运行返回 [1] FALSE
使用注意点
- 缺失值兼容:如果向量中存在
NA值,相等判断对应位置会返回NA,此时all()默认会返回NA。如果需要跳过缺失值、仅校验非缺失元素是否全部匹配目标值,可以传入na.rm = TRUE参数:v3 <- c(1,1,NA,1,1) all(v3 == 1, na.rm = TRUE) # 运行返回 [1] TRUE - 效率特性:
all()自带短路计算逻辑,遍历向量时只要碰到第一个不满足条件的元素就会立刻终止计算返回结果,在长向量场景下,比length(unique(v)) == 1、sum(v == 1) == length(v)这类需要遍历完整向量的写法性能好很多。 - 严格类型匹配:如果需要同时校验值和数据类型(比如区分整数型
1L和数值型1、区分逻辑值TRUE和数值1),可以使用identical()函数,但要注意必须构造和待判断向量长度一致的同类型向量做对比——identical()会严格校验两个对象的长度、类型、值完全一致,直接和标量对比会因为长度不匹配永远返回FALSE:# 严格校验v中所有元素均为数值型1 identical(v, rep(1, length(v)))
内容的提问来源于stack exchange,提问作者Babak Fi Foo
相关产品推荐
相关产品推荐

