Cuando elimino una lista de fechas, las vuelve a convertir en números. ¿Eso es normal? ¿Alguna solución alternativa que no sea volver a aplicar como fecha?
> 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
¿Es esto un error?
?unlist
: cuando es posible, los elementos de la lista se fuerzan a un modo común durante la eliminación de la lista, por lo que el resultado a menudo termina como un vector de caracteres. Los vectores serán coaccionados al tipo más alto de los componentes en la jerarquía NULL <raw <lógico <entero <real <complejo <carácter <lista <expresión: los pares se tratan como listas.unlist
devuelve entradas que no están en la lista sin cambios. No me parece nada borroso, pero la documentación debería mencionar lo que sucede con los atributos.Respuestas:
do.call
es una función útil para "hacer algo" con una lista. En nuestro caso, concatenarlo usandoc
. No es raro quecbind
orbind
data.frames de una lista en un solo big data.frame.Lo que estamos haciendo aquí es en realidad concatenar elementos de la
dd
lista. Esto sería análogo ac(dd[[1]], dd[[2]])
. Tenga en cuenta quec
se puede suministrar como función o como carácter.> 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"
fuente
"
alrededorc
?do.call
) pero a veces puede ser útil para funciones que necesitan ser citadas, por ejemplodo.call("+", as.list(c(1, 1)))
.Reduce
, es decirReduce("c",dd)
O usando purrr para aplanar una lista de fechas a un vector que conserva tipos:
list(as.Date(c("2013-01-01", "2013-02-01", "2013-03-01"))) %>% purrr::reduce(c)
resultados en
[1] "2013-01-01" "2013-02-01" "2013-03-01"
fuente