2012-09-12 41 views
45

的代碼:如何強迫一個列表對象爲類型「雙」

a <- structure(list(`X$Days` = c("10", "38", "66", "101", "129", "185", "283", 
           "374")), .Names = "X$Days") 

然後a就像

$`X$Days` 
[1] "10" "38" "66" "101" "129" "185" "283" "374" 

我想強制a爲數字值的陣列,但強迫函數返回我

Error: (list) object cannot be coerced to type 'double' 

謝謝,

回答

81

如果你想的a所有元素轉換成一個數字矢量length(a)大於1(OK,哪怕是長度爲1),你可以先unlist對象,然後轉換。

as.numeric(unlist(a)) 
# [1] 10 38 66 101 129 185 283 374 

請記住,這裏沒有任何質量控制。另外,X$Days一個強大的奇怪的名字。

22

如果您的列表中有多個元素需要轉換爲數字,您可以使用lapply(a, as.numeric)來實現。

3

您也可以使用列表子集來選擇要轉換的元素。如果你的列表有超過1個元素,這將是有用的。

as.numeric(a[[1]])

0

有一些數據問題。試想一下:

as.double(as.character("2.e")) # This results in 2 

另一種解決方案:

get_numbers <- function(X) { 
    X[toupper(X) != tolower(X)] <- NA 
    return(as.double(as.character(X))) 
} 
相關問題