R语言中如何一步判断变量非NULL且等于指定值?
R语言中一步判断可能为NULL的变量是否等于指定值
直接用x == "hello"会报错的原因是:当x为NULL时,这个比较会返回长度为0的逻辑向量,而if语句要求条件必须是长度为1的逻辑值,因此触发错误。以下是几种一步完成判断的方法:
方法1:利用
&&的短路求值特性&&会先判断左侧表达式,若左侧为FALSE则直接返回结果,不会执行右侧表达式,完美避免NULL引发的错误:x <- NULL if (!is.null(x) && x == "hello") print(x)这个方法和你原来的两步判断逻辑完全一致,只是合并成了一行,兼容性最好,适合大多数场景。
方法2:使用严格相等函数
identical()identical()会直接判断两个对象是否完全一致,当x为NULL时,它会返回FALSE而不会报错:x <- NULL if (identical(x, "hello")) print(x)注意:
identical()是严格匹配,比如x是因子类型的"hello"时,identical(x, "hello")会返回FALSE,而x == "hello"会返回TRUE,使用前要确认你的变量类型需求。方法3:结合
isTRUE()处理比较结果isTRUE()会将输入转换为长度为1的逻辑值,若输入是长度为0的向量或非TRUE的单值,都会返回FALSE:x <- NULL if (isTRUE(x == "hello")) print(x)这个方法要注意:如果
x是长度大于1的向量(比如c("hello", "world")),x == "hello"会返回多元素逻辑向量,isTRUE()会直接返回FALSE,而原来的两步判断会触发条件长度大于1的警告并取第一个元素,两者行为有差异,仅适合x只能是NULL或单值的场景。
内容的提问来源于stack exchange,提问作者tic-toc-choc
相关产品推荐
相关产品推荐

