Wenn ich eine Liste von Daten aufliste, werden sie wieder in Zahlen umgewandelt. Ist das normal? Eine andere Problemumgehung als die erneute Bewerbung als. Datum?
> dd <- as.Date(c("2013-01-01", "2013-02-01", "2013-03-01"))
> class(dd)
[1] "Date"
> unlist(dd)
[1] "2013-01-01" "2013-02-01" "2013-03-01"
> list(dd)
[[1]]
[1] "2013-01-01" "2013-02-01" "2013-03-01"
> unlist(list(dd))
[1] 15706 15737 15765
Ist das ein Fehler?
?unlist
: Wenn möglich, werden die Listenelemente während der Auflistung in einen allgemeinen Modus gezwungen, sodass das Ergebnis häufig als Zeichenvektor endet. Vektoren werden zum höchsten Typ der Komponenten in der Hierarchie gezwungen. NULL <raw <logisch <Ganzzahl <real <komplex <Zeichen <Liste <Ausdruck: Paarlisten werden als Listen behandelt.unlist
nicht aufgelistete Eingaben unverändert zurückgegeben werden. Es scheint mir überhaupt nicht verschwommen zu sein, aber die Dokumentation sollte erwähnen, was mit Attributen passiert.Antworten:
do.call
ist eine praktische Funktion, um mit einer Liste "etwas zu tun". In unserem Fall verketten Sie es mitc
. Es ist nicht ungewöhnlich,cbind
oderrbind
data.frames aus einer Liste in einen einzigen großen data.frame.Was wir hier tun, ist die Verkettung von Elementen der
dd
Liste. Dies wäre analog zuc(dd[[1]], dd[[2]])
. Beachten Sie, dassc
dies als Funktion oder als Zeichen angegeben werden kann.> dd <- list(dd, dd) > (d <- do.call("c", dd)) [1] "2013-01-01" "2013-02-01" "2013-03-01" "2013-01-01" "2013-02-01" "2013-03-01" > class(d) # proof that class is still Date [1] "Date"
quelle
"
herumc
?do.call
), kann aber manchmal für Funktionen nützlich sein, die zitiert werden müssen, zdo.call("+", as.list(c(1, 1)))
.Reduce
, dhReduce("c",dd)
Oder verwenden Sie purrr , um eine Liste von Daten auf einen Vektor zu reduzieren , der Typen beibehält :
list(as.Date(c("2013-01-01", "2013-02-01", "2013-03-01"))) %>% purrr::reduce(c)
führt zu
[1] "2013-01-01" "2013-02-01" "2013-03-01"
quelle