2012-09-12 17 views
45

kodu:Jak zmusić obiekt listy do typu „double”

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

Następnie a jest jak

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

chciałbym zmusić a do tablicy wartości liczbowych, ale zmuszanie zwracają mi

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

Pozdrawiamy,

Odpowiedz

81

Jeśli chcesz przekonwertować wszystkie elementy a do jednego numeryczny wektora i length(a) jest większa niż 1 (OK, nawet jeśli to jest o długości 1), można unlist obiekt, a następnie przeliczyć.

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

Należy pamiętać, że tutaj nie ma żadnych kontroli jakości. A także, X$Days potężne dziwne imię.

22

Jeśli twoja lista jest wielorakimi elementami, które wymagają przekonwertowania na wartości numeryczne, możesz to osiągnąć za pomocą lapply(a, as.numeric).

3

Możesz także użyć podzestawu listy, aby wybrać element, który chcesz przekonwertować. Byłoby użyteczne, gdyby twoja lista miała więcej niż 1 element.

as.numeric(a[[1]])

0

Są problemy z pewnymi danymi. Rozważmy:

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

Innym rozwiązaniem:

get_numbers <- function(X) { 
    X[toupper(X) != tolower(X)] <- NA 
    return(as.double(as.character(X))) 
} 
Powiązane problemy