R语言如何简洁判断可为NULL的变量是否等于指定字符串
R语言NULL值安全比较的简化实现
当变量可能取值为3种字符串之一或NULL时,直接用==做判断会报错:NULL == "test"会返回长度为0的逻辑向量,不符合if语句必须传入长度为1的TRUE/FALSE值的语法要求。先判空再做短路与比较的写法是安全的,但可以通过以下更简洁的方式实现:
原生
%in%运算符(最推荐)
这是R base自带的零成本方案,%in%在做匹配时会自动处理NULL、长度为0的向量场景,没有匹配到目标值时直接返回FALSE,不会触发运行错误:value <- NULL if (value %in% "test") { print("1") } else { print("2") }后续如果需要同时匹配多个候选字符串,直接给
%in%右侧传入向量即可,比如value %in% c("test", "dev", "prod"),扩展性强于==写法。isTRUE()包裹比较逻辑
如果更习惯==的书写习惯,可以直接在比较逻辑外层套isTRUE()函数。该函数会将所有非TRUE的结果(包括NULL、长度为0的逻辑值、NA、NaN)统一返回FALSE:if (isTRUE(value == "test")) { print("1") } else { print("2") }注意:如果变量可能取
NA值,该写法会将NA == "test"的结果判定为FALSE,进入else分支,使用前需要确认该逻辑符合业务预期。自定义二元运算符(适合高频使用场景)
如果需要大量编写这类空值安全的相等判断,可以自行封装一个简易二元运算符,一次定义后全局复用:# 定义空值安全的相等比较运算符 `%==%` <- function(x, y) { !is.null(x) && length(x) == 1 && x == y } # 后续直接调用即可 if (value %==% "test") { print("1") } else { print("2") }
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

