任何人都可以解释为什么以下R中发生:字符串强制转换为int
> 0.0 < "14.9a"
[1] TRUE
> 2.03 < "14.9a"
[1] FALSE
> 10.11006 < "14.9a"
[1] TRUE
当“14.9a”内部强制转换为一个int会发生什么?正如第二个例子所示,它不能忽略非数字字符。
任何人都可以解释为什么以下R中发生:字符串强制转换为int
> 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”)
正确,但请注意,第一种情况是“0”<“14.9a”'而不是'“0.0”'。这几乎是'as.character(0.0)'的结果。 – Tommy 2012-04-12 15:55:53