2012-04-12 123 views
3

任何人都可以解释为什么以下R中发生:字符串强制转换为int

> 0.0 < "14.9a" 
[1] TRUE 

> 2.03 < "14.9a" 
[1] FALSE 

> 10.11006 < "14.9a" 
[1] TRUE 

当“14.9a”内部强制转换为一个int会发生什么?正如第二个例子所示,它不能忽略非数字字符。

回答

14

我认为这是做相反的事情,并将int转换为字符串。

> "0.0" < "14.9a" 
[1] TRUE 

> "2.03" < "14.9a" 
[1] FALSE 

> "10.11006" < "14.9a" 
[1] TRUE 

从帮助页面:

如果这两个参数是不同类型的原子矢量,一个是 强制为其他的类型,优先级 是字符的(减小)顺序,复数,数字,整数,逻辑和原始数据。

并且还:在字符向量串

比较是使用在使用中的区域设置的整理序列 串内的字典式:见 语言环境。 en_US等语言环境的整理顺序通常是 ,与C(它应该使用ASCII)不同,并且可能会令人惊讶。 当心作出有关归类顺序的任何假设的...

+1

正确,但请注意,第一种情况是“0”<“14.9a”'而不是'“0.0”'。这几乎是'as.character(0.0)'的结果。 – Tommy 2012-04-12 15:55:53

5

作为每?"<"

如果两个参数是不同类型的原子矢量,一个是 强制为其他的类型, 的(递减)顺序是字符,复数,数字,整数,逻辑和 原始。

数值因此转换为字符串,然后根据字典顺序比较字符串。 (即,“2”>“10”)