为何在R语言中字符串与0比较时"some string" > 0结果为TRUE?
为什么R语言中
"string" > 0的运算结果为TRUE? 你测试了一系列比较操作,发现非数字字符串和数值比较的结果很特殊:
"some string" > 0 #[1] TRUE "some string" < 0 # [1] FALSE "some string" == 0 #[1] FALSE as.numeric("some string") #[1] NA "some string" > 1000000 #[1] TRUE
你曾猜测是隐式类型转换或取字符长度比较,但测试后都不成立,还看到过类似的PHP问题(为什么PHP中"someString" == 0会判定为true?)但无法理解R的行为。
R的比较运算规则解释
在R的运算逻辑里,当字符串与数值类型进行比较时,遵循以下规则:
- 如果字符串无法转换为有效数值(比如"some string"这类非数字字符串),它会被判定为大于任何数值,同时小于任何其他字符串(仅针对跨类型比较场景)。
- 因此会出现你看到的结果:
- 非数字字符串和任何数值做
>比较,结果都是TRUE - 做
<比较结果都是FALSE - 做
==比较结果都是FALSE(因为转换失败,无法与数值相等)
- 非数字字符串和任何数值做
如果是可转换为数值的字符串,就会正常按数值比较:
"123" > 0 # [1] TRUE "123" > 200 # [1] FALSE
内容的提问来源于Stack Exchange,提问作者Staehlo
相关产品推荐
相关产品推荐

