## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----setup-------------------------------------------------------------------- library(constructive) ## ----------------------------------------------------------------------------- .cstr_construct # a character vector .cstr_construct(letters) # a constructive object, construct(letters) ## ----------------------------------------------------------------------------- .cstr_construct.Date <- function(x, ...) { opts <- list(...)$opts$Date %||% opts_Date() if (is_corrupted_Date(x) || opts$constructor == "next") return(NextMethod()) UseMethod(".cstr_construct.Date", structure(NA, class = opts$constructor)) } ## ----eval=FALSE--------------------------------------------------------------- # opts_Date <- function( # constructor = c( # "as.Date", "as_date", "date", "new_date", "as.Date.numeric", "as_date.numeric", "next", "double"), # ..., # origin = "1970-01-01") { # .cstr_options("Date", constructor = constructor[[1]], ..., origin = origin) # } ## ----error = TRUE------------------------------------------------------------- try({ x <- structure("12345", class = "Date") x x + 1 }) ## ----------------------------------------------------------------------------- is_corrupted_Date <- function(x) { !is.double(x) } ## ----------------------------------------------------------------------------- construct(x) ## ----------------------------------------------------------------------------- constructive:::.cstr_construct.Date.as.Date ## ----------------------------------------------------------------------------- x <- structure(c(12345, 20000), class = "Date") y <- structure(c(12345, Inf), class = "Date") construct(x) construct(y) ## ----------------------------------------------------------------------------- x <- structure(c(12345, 20000), class = "Date", some_attr = 42) # attributes are not visible due to "Date"'s printing method x construct(x) ## ----------------------------------------------------------------------------- constructive:::repair_attributes_Date constructive:::repair_attributes_factor constructive:::repair_attributes_tbl_df