So zwingen Sie ein Listenobjekt zur Eingabe von 'double'


76

Der Code:

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

Dann aist wie

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

Ich möchte azu einem Array von numerischen Werten zwingen , aber Zwangsfunktionen geben mich zurück

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

Vielen Dank,

Antworten:


134

Wenn Sie alle Elemente von ain einen einzelnen numerischen Vektor konvertieren möchten und length(a)größer als 1 sind (OK, auch wenn er die Länge 1 hat), können Sie unlistdas Objekt zuerst konvertieren und dann konvertieren.

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

Beachten Sie, dass es hier keine Qualitätskontrollen gibt. Auch X$Daysein mächtiger seltsamer Name.


37

Wenn Ihre Liste aus mehreren Elementen besteht, die in numerische Elemente konvertiert werden müssen, können Sie dies mit erreichen lapply(a, as.numeric).


8

Sie können auch eine Listenuntermenge verwenden, um das Element auszuwählen, das Sie konvertieren möchten. Es wäre nützlich, wenn Ihre Liste mehr als 1 Element enthalten würde.

as.numeric(a[[1]])


0

Es gibt Probleme mit einigen Daten. Erwägen:

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

Eine andere Lösung:

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

0

In diesem Fall erledigt auch eine Schleife die Arbeit (und ist normalerweise ausreichend schnell).

a <- array(0, dim=dim(X))
for (i in 1:ncol(X)) {a[,i] <- X[,i]}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.