2012-11-23 61 views
4

從字符串到整數的32位二進制字符串轉換失敗。見下文將字符串轉換爲整數R時出錯

$ R> strtoi( 「10101101100110001110011001111111」,基部= 2)

$ R> [1] NA

任何想法的問題可能是?

回答

6

它看起來像strtoi不能處理的數字大於2^31

strtoi("1111111111111111111111111111111", base=2L) 
# [1] 2147483647 
strtoi("10000000000000000000000000000000", base=2L) 
# [1] NA 

這是最大整我的機器(也可能是你的)可以處理一個整數:

.Machine$integer.max 
# [1] 2147483647 

注意,文檔會警告溢出:無法解釋爲整數或溢出的值作爲NA_integer_返回。

你可以做的是寫自己的函數,返回輸出爲數字而不是整數:

convert <- function(x) { 
    y <- as.numeric(strsplit(x, "")[[1]]) 
    sum(y * 2^rev((seq_along(y)-1))) 
} 

convert("1111111111111111111111111111111") 
# [1] 2147483647 
convert("10000000000000000000000000000000") 
# [1] 2147483648