2012-04-12 124 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」)