--- title: "Column types" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Column types} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, eval = rlang::is_installed(c("dplyr", "tidyr", "purrr")), comment = "#>" ) ``` ```{r, include = FALSE} library(dplyr) library(tidyr) library(purrr) requireNamespace("hms", quietly = TRUE) ``` ```{r setup} library(tibble) ``` ## Overview This vignette shows an overview of known data types and their abbreviations, and their origin. For example, `` in the header of a column indicates an integer column, and `` denotes a character column. ```{r howto, echo = FALSE, eval = FALSE} library(tidyverse) library(tidymodels) library(vctrs) library(pillar) all_methods <- c("vec_ptype_abbr", "vec_ptype_full", "type_sum") %>% map(methods) %>% map(as.character) %>% map(~ gsub("^.*[.]", "", .x)) %>% unlist() %>% unique() set_names(rep_along(all_methods, list("")), all_methods) %>% dput() ``` ```{r data, echo = FALSE} data <- compact(list( "Atomic" = rlang::quos( logical = TRUE, integer = 1L, double = 1.5, character = "A", complex = 1i, raw = as.raw(1), list = list(1), "named list" = list(a = 1) ), "Built-in objects" = rlang::quos( factor = factor("A"), ordered = ordered("a"), Date = Sys.Date(), POSIXt = Sys.time(), difftime = vctrs::new_duration(1) ), "Objects from other packages" = if (rlang::is_installed(c("bit64", "blob", "hms"))) rlang::quos( hms = hms::hms(1), integer64 = bit64::as.integer64(1e10), blob = blob::blob(raw(1)) ), "Data frames" = rlang::quos( data.frame = data.frame(a = 1), tbl_df = tibble(a = 1) ), "Unchanged" = rlang::quos( AsIs = I(1L) ), "vctrs types" = rlang::quos( unspecified = vctrs::unspecified(1), vctrs_list_of = vctrs::list_of(c(1L)), vctrs_vctr = vctrs::new_vctr(1L), vctrs_partial_factor = vctrs::partial_factor(letters), vctrs_partial_frame = vctrs::partial_frame(a = 1) ), "Language objects" = rlang::quos( "function" = function() NULL, symbol = quote(a), expression = parse(text = "a <- 1\nb<- 2"), quosures = rlang::quos(a = 1) ) )) ``` ```{r table, echo = FALSE} tbl <- data %>% map(unclass) %>% map(enframe, "Data type", "Expression") %>% enframe("Class", "data") %>% unnest(data) %>% mutate(Example = map_chr(Expression, rlang::as_label)) %>% mutate(Value = map(Expression, rlang::eval_tidy)) %>% select(-Expression) %>% mutate(Class = if_else(Class == lag(Class, default = ""), "", Class)) %>% mutate("Column header" = map_chr(Value, type_sum)) ``` ```{r kable, echo = FALSE} tbl %>% select(-Value) %>% mutate(Example = paste0("`", Example, "`")) %>% knitr::kable(escape = FALSE) ``` ## Example values The following overview contains example values for each type: ```{r glimpse, echo = FALSE} tbl %>% select(`Data type`, `Value`) %>% filter(map_lgl(Value, vctrs::vec_is)) %>% deframe() %>% as_tibble() %>% glimpse() ``` ## Implementation The column header is obtained by calling `pillar::type_sum()` on the column. This is an S3 method that can be overridden, but most of the time it is more useful to override `vctrs::vec_ptype_abbr()`: ```{r type_sum_default, results = if (Sys.getenv("IN_GALLEY") != "") "hide" else "markup"} pillar:::type_sum.default ```