---
title: "Format Catalogs"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Format Catalogs}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

### The `fcat()` function
As of **fmtr** version 1.2, you can now create a format catalog.  A format
catalog is a collection of formats that can be saved, shared, and reused.
The format catalog is created with the `fcat()` function.  A format catalog 
can also be converted to and from a data frame using the `as.data.frame()`
and `as.fcat()` functions.  These functions make it easy to store
formatting information as tabular metadata, such as in database tables or 
Excel spreadsheets. Here is an example:
```{r eval=FALSE, echo=TRUE}  
# Create format catalog
c1 <- fcat(num_fmt  = "%.1f",
           label_fmt = value(condition(x == "A", "Label A"),
                             condition(x == "B", "Label B"),
                             condition(TRUE, "Other")),
           date_fmt = "%d%b%Y")
 
# Use formats in the catalog
fapply(2, c1$num_fmt)
# [1] "2.0"

fapply(c("A", "B", "C", "B"), c1$label_fmt)
# [1] "Label A" "Label B" "Other"   "Label B"

fapply(Sys.Date(), c1$date_fmt)
# [1] "22Jul2021"

# Convert to a data frame
dat <- as.data.frame(c1)
dat
#        Name Type Expression   Label Order
# 1   num_fmt    S       %.1f            NA
# 2 label_fmt    U   x == "A" Label A    NA
# 3 label_fmt    U   x == "B" Label B    NA
# 4 label_fmt    U       TRUE   Other    NA
# 5  date_fmt    S     %d%b%Y            NA

# Save format catalog for later use
write.fcat(c1, tempdir())

```

Next: [Format and Combine](fmtr-fapply2.html)