R语言中关系运算符对比字符串与浮点、整型数据时的运算规则是什么?
R语言跨类型关系运算逻辑说明
测试代码与运行结果
测试代码:
var1=90 var2='mango' var3=90.0 var1>var2 var2>var3
运行输出:
> var1>var2 [1] FALSE > var2>var3 [1] TRUE
核心运算规则
- R的关系运算符(
>、<、==等)作用于原子类型数据时,如果两侧数据类型不一致,不会直接抛出错误,会按照固定优先级将低优先级类型转换为高优先级类型,待两侧类型统一后再做比较。原子类型的优先级从低到高为:逻辑型 < 整型 < 浮点型(普通numeric类型) < 字符型。 - 只要比较两侧有一侧是字符型,另一侧无论是整型还是浮点型,都会被自动转换为字符型,最终对两个字符串按**字典序(基于ASCII编码值逐位对比)**判断大小:从字符串首位开始逐位对比同位置字符的ASCII编码值,第一个出现编码值更大字符的字符串整体更大;如果前序字符完全一致,更长的字符串更大。
- 字符编码层面,数字字符'0'-'9'的ASCII码范围是48-57,小写英文字母'a'-'z'的ASCII码范围是97-122,所有小写字母的编码值都大于数字字符。
运行结果原因解释
- 执行
var1>var2时:var1是数值90,var2是字符型"mango",由于字符型优先级更高,var1被自动转换为字符型"90",实际比较逻辑为"90" > "mango"。两个字符串首字符分别为'9'(ASCII码57)和'm'(ASCII码109),57 < 109,因此返回结果FALSE。 - 执行
var2>var3时:var3是浮点型90.0,同样会被转换为字符型,浮点数小数部分为0时转字符不会保留.0后缀,因此转换结果同样是"90",实际比较逻辑为"mango" > "90",首字符'm'的编码值大于'9',因此返回结果TRUE。
内容的提问来源于stack exchange,提问作者Adamya Gaur
相关产品推荐
相关产品推荐

