I've not used vctrs before, but I was trying to convert a vector POSIXct dates to a vector of dates so I thought I'd give it a shot. I followed some of the documentation and I was able to hack my way to my desired result. However, I'm not sure I understand all the behaviors and I'm pretty confident I could have gotten to my desired result more easily/understandably. I provided my code and some commentary below. If anyone is able to take a look and provide some feedback I'd really appreciate it. Apologies in advance for any incoherence and thanks for your help!
library(timeDate)
library(vctrs)
library(magrittr)
library(purrr)
#>
#> Attaching package: 'purrr'
#> The following object is masked from 'package:magrittr':
#>
#> set_names
# This will provide a vector of POSIXct values
dates <- attr(timeDate::holidayNYSE(),'Data')
dates %>% str()
#> POSIXct[1:9], format: "2019-01-01 05:00:00" "2019-01-21 05:00:00" ...
# When I change the class to date I get way in the future dates, I assume this is because it adds the time to 1970 origin instead of just days...
class(dates) <- c('Date','Date')
str(dates)
#> Date[1:9], format: "4235647-01-29" "4240378-03-08" "4247001-09-23" "4261185-03-07" ...
# Reset dates object.
dates <- attr(timeDate::holidayNYSE(),'Data')
# When I run the dates into the vec_cast.POSIXct function it seems to stay in POSIXct format and shift the time back to my timezone.
vctrs::vec_cast.POSIXct(x=dates,to=date) %>% str()
#> POSIXct[1:9], format: "2018-12-31 21:00:00" "2019-01-20 21:00:00" ...
# Apply as.Date to all the dates I see a list of dates.
dates %>%
purrr::map(as.Date) %>%
str()
#> List of 9
#> $ : Date[1:1], format: "2019-01-01"
#> $ : Date[1:1], format: "2019-01-21"
#> $ : Date[1:1], format: "2019-02-18"
#> $ : Date[1:1], format: "2019-04-19"
#> $ : Date[1:1], format: "2019-05-27"
#> $ : Date[1:1], format: "2019-07-04"
#> $ : Date[1:1], format: "2019-09-02"
#> $ : Date[1:1], format: "2019-11-28"
#> $ : Date[1:1], format: "2019-12-25"
# I'd rather work with a vector of dates so I apply unlist and the dates convert back to numbers.
dates %>%
purrr::map(as.Date) %>%
unlist() %>%
str()
#> num [1:9] 17897 17917 17945 18005 18043 ...
# When I unlist and then vec_cast.Date to date I get my desired result.
dates %>%
purrr::map(as.Date) %>%
unlist() %>%
vctrs::vec_cast.Date(to=date) %>% str()
#> Date[1:9], format: "2019-01-01" "2019-01-21" "2019-02-18" "2019-04-19" "2019-05-27" ...
Created on 2019-01-21 by the reprex package (v0.2.1)