> You may not have expected it, but that result is what is described: From the > help page for `as.vector`: > > "For as.vector, a vector (atomic or of type list). All attributes are removed > from the result if it is of an atomic mode, ..." > > And since POSIXct vectors _are_ of atomic mode, all of their attributes are > removed.
It is not that simple: as.vector is a generic function and may have methods written for certain classes (just as with as.list). It does have a method for factor (which has an atomic mode) > methods("as.vector") [1] as.vector.factor so we get some attributes copied > f <- factor(c("Anteater","Bear","Cat")) > str(f) Factor w/ 3 levels "Anteater","Bear",..: 1 2 3 > str(as.vector(f, mode="list")) List of 3 $ : Factor w/ 3 levels "Anteater","Bear",..: 1 $ : Factor w/ 3 levels "Anteater","Bear",..: 2 $ : Factor w/ 3 levels "Anteater","Bear",..: 3 Since there is no POSIXct method we get the default behavior. Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On > Behalf > Of David Winsemius > Sent: Wednesday, May 22, 2013 1:52 PM > To: Alexandre Sieira > Cc: r-help@r-project.org > Subject: Re: [R] as.vector with mode="list" and POSIXct > > > On May 20, 2013, at 2:09 PM, Alexandre Sieira wrote: > > > I was trying to convert a vector of POSIXct into a list of POSIXct, > > However, I had a > problem that I wanted to share with you. > > > > Works fine with, say, numeric: > > > > > >> v = c(1, 2, 3) > >> v > > [1] 1 2 3 > >> str(v) > > num [1:3] 1 2 3 > >> l = as.vector(v, mode="list") > >> l > > [[1]] > > [1] 1 > > > > [[2]] > > [1] 2 > > > > [[3]] > > [1] 3 > > > >> str(l) > > List of 3 > > $ : num 1 > > $ : num 2 > > $ : num 3 > > > > If you try it with POSIXct, on the other hand... > > > > > >> v = c(Sys.time(), Sys.time()) > >> v > > [1] "2013-05-20 18:02:07 BRT" "2013-05-20 18:02:07 BRT" > >> str(v) > > POSIXct[1:2], format: "2013-05-20 18:02:07" "2013-05-20 18:02:07" > >> l = as.vector(v, mode="list") > >> l > > [[1]] > > [1] 1369083728 > > > > [[2]] > > [1] 1369083728 > > > >> str(l) > > List of 2 > > $ : num 1.37e+09 > > $ : num 1.37e+09 > > > > The POSIXct values are coerced to numeric, which is unexpected. > > You may not have expected it, but that result is what is described: From the > help page for > `as.vector`: > > "For as.vector, a vector (atomic or of type list). All attributes are removed > from the result > if it is of an atomic mode, ..." > > And since POSIXct vectors _are_ of atomic mode, all of their attributes are > removed. > > > is.atomic(as.POSIXct("2001-01-01") ) > [1] TRUE > > (I realize that this is a belated response, and that you and Jeff Newmiller > are continuing a > correspondence on what I think appears to be a separate concern) , but I > needed to go > back to the first posting to figure out what the questions were. > > > > > The documentation for as.vector says: "The default method handles 24 input > > types and > 12 values of type: the details of most coercions are undocumented and subject > to > change." It would appear that treatment for POSIXct is either missing or needs > adjustment. > > As in the case of factor-classed vectors, POSIXct-vectors are atomic mode. > Yours was a > selective reading. (And you found a way around this with `as.list`.) > > > is.atomic(factor("2001-01-01") ) > [1] TRUE > -- > David. > > > > Unlist (for the reverse) is documented to converting to base types, so I > > can't complain. > Just wanted to share that I ended up giving up on vectorization and writing > the two > following functions: > > > > > > unlistPOSIXct <- function(x) { > > retval = rep(Sys.time(), length(x)) > > for (i in 1:length(x)) retval[i] = x[[i]] > > return(retval) > > } > > > > listPOSIXct <- function(x) { > > retval = list() > > for (i in 1:length(x)) retval[[i]] = x[i] > > return(retval) > > } > > > > Is there a better way to do this (other than using *apply instead of for > > above) that > better leverages vectorization? Am I missing something here? > > > > Thanks! > > > > > -- > > David Winsemius > Alameda, CA, USA > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.