---
title: "5 - Utility Functions"
format: 
  html:
    toc: true
vignette: >
  %\VignetteIndexEntry{5 - Utility Functions}
  %\VignetteEngine{quarto::html}
  %\VignetteEncoding{UTF-8}
knitr:
  opts_chunk:
    collapse: true
    comment: '#>'
---
## Introduction
You imported your database, but now you might want to visualize some part of it.
There are a lot of ways to do so, so EDCimport provides functions for a few concepts.
As in previous vignettes, we will be using `edc_example()`, but in the real world you should use EDC reading functions. See `vignette("reading")` to see how.
```{r}
#| warning: false 
library(EDCimport) 
library(dplyr) 
db = edc_example(N=200) %>%
  edc_unify_subjid() %>%
  edc_clean_names() 
db 
load_database(db)
```
## Joins
As the primary key is almost always SUBJID, {dplyr} joins can be simplified with default `by` and `suffix` arguments.
```{r}
data_xx = enrol %>% 
  edc_left_join(data2) %>% 
  edc_right_join(data1) %>% 
  edc_full_join(ae)
dim(data_xx)
names(data_xx) %>% stringr::str_subset("crfname") #suffixes are automated
```
## "Yes/No" harmonizer
Using `fct_yesno()`, you can harmonize "Yes/No" values into a vector with the "Yes" level first:
```{r}
set.seed(42)
x = tibble(a=c("Yes", "No"), b=c("Oui", "Non"), c=0:1, d=c(TRUE, FALSE))
x
x %>% dplyr::mutate_all(fct_yesno)
```
## Miscellaneous
These three helpers don’t quite fit anywhere else, but they still deserve their moment!
-   `save_session_info()` saves the output of `session_info()` to a file.
-   `edc_warn_extraction_date()` triggers a warning if the extraction date of your `edc_database` is older than a specified threshold.
-   `edc_inform_code()` outputs a message indicating the amount of code written for this analysis, assuming you have one file sourcing others.