谁能解释为什么在 R 中会发生以下情况:
> 0.0 < "14.9a"
[1] TRUE
> 2.03 < "14.9a"
[1] FALSE
> 10.11006 < "14.9a"
[1] TRUE
当“14.9a”在内部强制转换为 int 时会发生什么?正如第二个示例所示,它不能只是忽略非数字字符。
谁能解释为什么在 R 中会发生以下情况:
> 0.0 < "14.9a"
[1] TRUE
> 2.03 < "14.9a"
[1] FALSE
> 10.11006 < "14.9a"
[1] TRUE
当“14.9a”在内部强制转换为 int 时会发生什么?正如第二个示例所示,它不能只是忽略非数字字符。
我认为它正在做相反的事情并将 int 转换为字符串。
> "0.0" < "14.9a"
[1] TRUE
> "2.03" < "14.9a"
[1] FALSE
> "10.11006" < "14.9a"
[1] TRUE
从帮助页面:
如果两个参数是不同类型的原子向量,则将一个强制转换为另一个类型,优先级(递减)顺序为字符、复数、数字、整数、逻辑和原始。
并且:
字符向量中字符串的比较是使用正在使用的语言环境的整理顺序在字符串中按字典顺序进行的:请参阅语言环境。诸如 en_US 之类的语言环境的整理顺序通常与 C(应该使用 ASCII)不同,并且可能令人惊讶。谨防对整理顺序做出任何假设......
根据?"<"
:
如果两个参数是不同类型的原子向量,则将一个强制转换为另一个类型,优先级(递减)顺序为字符、复数、数字、整数、逻辑和原始。
因此,数值被转换为字符串,然后根据它们的字典顺序对字符串进行比较。(即“2”>“10”)