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,

Lisa Ann
quelle

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.

BenBarnes
quelle
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).

Matthew Plourde
quelle
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]])

USER_1
quelle
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)))
}
user5274471
quelle
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]}
Karsten Reuss
quelle