2012-09-12 9 views
45

El código:Cómo forzar a un objeto de lista para escribir 'doble'

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

Entonces a es como

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

quisiera obligar a a a una matriz de valores numéricos, pero coaccionar funciones devuelven me

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

Gracias,

Respuesta

81

Si desea convertir todos los elementos de a a un solo vector numérico y length(a) es mayor que 1 (OK, incluso si se trata de longitud 1), se puede unlist el objeto primero y luego convertir.

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

Tenga en cuenta que no hay ningún control de calidad aquí. Además, X$Days un poderoso nombre extraño.

22

Si su lista se compone de varios elementos que se deben convertir a numéricos, puede hacerlo con lapply(a, as.numeric).

3

También puede usar el subconjunto de listas para seleccionar el elemento que desea convertir. Sería útil si su lista tuviera más de 1 elemento.

as.numeric(a[[1]])

0

hay problemas con algunos datos. Considere:

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

Otra solución:

get_numbers <- function(X) { 
    X[toupper(X) != tolower(X)] <- NA 
    return(as.double(as.character(X))) 
} 
Cuestiones relacionadas