diff --git a/.Rbuildignore b/.Rbuildignore new file mode 100644 index 0000000..7ae2877 --- /dev/null +++ b/.Rbuildignore @@ -0,0 +1,8 @@ +^.*\.Rproj$ +^\.Rproj\.user$ +^LICENSE\.md$ +^\.github$ +^docs$ +^_pkgdown\.yaml$ +^doc$ +^Meta$ diff --git a/.gitignore b/.gitignore index 19e3340..a0bb0ad 100644 --- a/.gitignore +++ b/.gitignore @@ -5,8 +5,9 @@ README.Rmd README.html rQog.Rproj rqog.Rproj -.Rbuildignore Read-and-delete-me cache testausta.R rqog_tutorial.md +/doc/ +/Meta/ diff --git a/DESCRIPTION b/DESCRIPTION index 6614252..d8d9d70 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -12,13 +12,15 @@ Imports: haven, readxl, glue, - knitr, - dplyr, ggplot2, tidyr, devtools Depends: R (>= 3.5.0) +Suggests: + dplyr, + knitr, + rmarkdown Description: R client for the Quality of Government (QOG) open data. Client can be used to fetch data files and converted into data.frame objects in R. -License: MIT + file LICENSE +License: MIT + file LICENCE RoxygenNote: 7.1.1 diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..999b5fa --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +# MIT License + +Copyright (c) 2021 rqog authors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index f8808a5..1d586a7 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ maturing](https://img.shields.io/badge/lifecycle-maturing-blue.svg)](https://www.tidyverse.org/lifecycle/#maturing) [![CRAN status](https://www.r-pkg.org/badges/version/rqog)](https://CRAN.R-project.org/package=rqog) +[![R-CMD-check](https://github.com/rOpenGov/rqog/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/rOpenGov/rqog/actions/workflows/R-CMD-check.yaml) +[![r-universe](https://ropengov.r-universe.dev/badges/rqog)](https://ropengov.r-universe.dev/) Download the latest and archived datasets from the [Quality of @@ -18,7 +20,7 @@ Government Institute](https://qog.pol.gu.se/data) using the function for help, [package vignette](http://ropengov.github.io/rqog/articles/rqog_tutorial.html) for more examples and -[data.markuskainu.fi/qog/](http://data.markuskainu.fi/qog/index.html) +[data.markuskainu.fi/qog/](https://data.markuskainu.fi/qog/index.html) for interactive metadata. ## Installation @@ -27,6 +29,19 @@ for interactive metadata. devtools::install_github("ropengov/rqog") ``` +Alternatively, you can use the +[r-universe](https://ropengov.r-universe.dev): + +``` r +# Enable this universe +options(repos = c( + ropengov = "https://ropengov.r-universe.dev", + CRAN = "https://cloud.r-project.org" +)) + +install.packages("rqog") +``` + ## Use **Download data** diff --git a/vignettes/rqog_tutorial.Rmd b/vignettes/rqog_tutorial.Rmd index 0a12792..02d8a95 100644 --- a/vignettes/rqog_tutorial.Rmd +++ b/vignettes/rqog_tutorial.Rmd @@ -1,6 +1,10 @@ --- title: "rqog-package for R" -output: html_document +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{rqog-package for R} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} editor_options: chunk_output_type: console --- @@ -13,7 +17,8 @@ editor_options: ```{r include = FALSE} -knitr::opts_chunk$set(echo = TRUE,message = FALSE, warning = FALSE, cache = FALSE) +knitr::opts_chunk$set(echo = TRUE,message = FALSE, warning = FALSE, cache = FALSE, + out.width = "100%") ``` @@ -270,5 +275,5 @@ ggplot(plot_d, aes(x=ht_regtype_lab,y=n)) + ```{r} -devtools::session_info() +sessionInfo() ``` diff --git a/vignettes/rqog_tutorial.html b/vignettes/rqog_tutorial.html index 9a4f3dd..2be880f 100644 --- a/vignettes/rqog_tutorial.html +++ b/vignettes/rqog_tutorial.html @@ -1,74 +1,151 @@ - + - - + + + + rqog-package for R - - - - - - - - - - + + + + + - + + + + + + - -
- + +

rqog-package for R

+ -

compiled at 2016-02-08 12:35:59

+

compiled at 2021-10-13 15:41:09

Download data from the Quality of Government Institute data

Quotation from Quality of Governance institute website

@@ -85,152 +162,288 @@

rqog-package for R

  • QoG Expert Survey Data
  • QoG EU Regional Data
  • -

    rqog-package provides access to Basic, Standard and OECD datasets through function read_qog(). Standard data has all the same indicators as in Basic data (241 variables) and an additional ~2300 indicators. Both basic and standard datasets have 211 countries. OECD dataset has 1274 indicators from 34 countries. rqog uses longitudinal datasets by default that have time-series of varying duration from majority of the indicators and countries.

    +

    rqog-package provides access to Basic, Standard and OECD datasets through function read_qog(). Standard data has all the same indicators as in Basic data (367 variables) and an additional ~1600 indicators. Both basic and standard datasets have 194 countries. OECD dataset has 1020 indicators from 35 countries. rqog uses longitudinal datasets by default that have time-series of varying duration from majority of the indicators and countries.

    Quality of Government Institute provides codebooks for all datasets:

      -
    1. Basic data codebook
    2. -
    3. Standard data codebook
    4. -
    5. OECD data codebook
    6. +
    7. Basic data codebook
    8. +
    9. Standard data codebook
    10. +
    11. OECD data codebook

    You consult the codebooks for description of the data and indicators.

    Installation

    -
    library(devtools)
    -install_github("ropengov/rqog")
    -library(rqog)
    +
    library(devtools)
    +install_github("ropengov/rqog")
    +library(rqog)

    Examples

    -
    -

    Basic Data

    -

    Basic data has a limited selection of most common indicators. Below is an example on how to extract data on population and Democracy (Freedom House/Polity) index from BRIC-countries from 1990 to 2010 and to plot it.

    -
    library(rqog)
    -# Download a local coppy of the file
    -dat <- read_qog(which.data="basic", data.type = "time-series")
    -# Subset the data
    -dat2 <- dat[dat$year %in% 1990:2010 & dat$cname %in% c("Russia","China","India","Brazil"),
    -             c("cname","year","fh_ipolity2","wdi_pop")]
    -# gather to long format
    -library(tidyr)
    -dat.l <- gather(dat2, "var", "value", 3:4)
    -dat.l <- dat.l[!is.na(dat.l$value), ]
    -# Plot the data
    -library(ggplot2)
    -ggplot(dat.l, aes(x=year,y=value,color=cname)) + 
    -  geom_point() + geom_line() +
    -  geom_text(data=merge(dat.l,aggregate(year ~ cname, dat.l, max),
    -                     by=c("year","cname")),
    -          aes(x=year,y=value,label=cname),
    -          hjust=1,vjust=-1,size=3,alpha=.8) +
    -  facet_wrap(~var, scales="free") +
    -  theme(legend.position="none")
    -

    -
    -
    -

    Standard data

    -

    Standard data includes roughly 2500 indicators. Below is an example on how to extract data on Environmental Performance Index and Party of Chief Executive: How Long in Office from BRIC-countries and plot it.

    -
    library(rqog)
    -# Download a local coppy of the file
    -dat <- read_qog("standard", "time-series")
    -# Subset the data
    -dat2 <- dat[dat$cname %in% c("Russia","China","India","Brazil") & dat$year %in% 2000:2010, c("cname","year","epi_epi","dpi_hlio")]
    -# gather to long format
    -library(tidyr)
    -dat.l <- gather(dat2, "var", "value", 3:4)
    -dat.l <- dat.l[!is.na(dat.l$value), ]
    -# Plot the data
    -library(ggplot2)
    -ggplot(dat.l, aes(x=year,y=value,color=cname)) + 
    -  geom_point() + geom_line() +
    -  geom_text(data=merge(dat.l,aggregate(year ~ cname, dat.l, max),
    -                     by=c("year","cname")),
    -          aes(x=year,y=value,label=cname),
    -          hjust=1,vjust=-1,size=3,alpha=.8) +
    -  facet_wrap(~var, scales="free") +
    -  theme(legend.position="none")
    -

    -
    -
    -

    OECD data

    -

    OECD data includes 1199 variables, but from a smaller number of wealthier countries of 34. In the example below four indicators:

    +
    +

    Download data and plot numeric indicators

    +

    Basic Data

    +

    Basic data has a selection of most common indicators, 344 indicators from 211 countries. Below is an example on how to extract data on population and Democracy (Freedom House/Polity) index from BRIC-countries from 1990 to 2010 and to plot it.

    +
    library(rqog)
    +library(dplyr)
    +library(ggplot2)
    +library(tidyr)
    +# Download a local coppy of the file
    +basic <- read_qog(which_data="basic", data_type = "time-series")
    +# Subset the data
    +dat.l <- basic %>% 
    +  # filter years and countries
    +  filter(year %in% 1990:2010,
    +         cname %in% c("Russia","China","India","Brazil")) %>% 
    +  # select variables
    +  select(cname,year,p_polity2,wdi_pop1564) %>% 
    +  # gather to long format
    +  gather(., var, value, 3:4) %>% 
    +  # remove NA values
    +  filter(!is.na(value))
    +
    +# Plot
    +ggplot(dat.l, aes(x=year,y=value,color=cname)) + 
    +  geom_point() + geom_line() +
    +  geom_text(data = dat.l %>% 
    +              group_by(cname) %>% 
    +              filter(year == max(year)),
    +          aes(x=year,y=value,label=cname),
    +          hjust=1,vjust=-1,size=3,alpha=.8) +
    +  facet_wrap(~var, scales="free") +
    +  theme_minimal() +  
    +  theme(legend.position = "none") +
    +  labs(title = "Plotting QoG basic data",
    +       caption = "Data: QoG Basic data")
    +

    +

    Standard data

    +

    Standard data includes 2190 indicators from 211 countries. Below is an example on how to extract data on Economic Performance and GINI index (World Bank estimate) from BRIC-countries and plot it.

    +
    library(rqog)
    +# Download a local coppy of the file
    +standard <- read_qog("standard", "time-series")
    +# Subset the data
    +dat.l <- standard %>% 
    +  # filter years and countries
    +  filter(year %in% 1990:2020,
    +         cname %in% c("Russia","China","India","Brazil")) %>% 
    +  # select variables
    +  select(cname,year,bti_ep,wdi_gini) %>% 
    +  # gather to long format
    +  gather(., var, value, 3:4) %>% 
    +  # remove NA values
    +  filter(!is.na(value))
    +
    +# Plot the data
    +# Plot
    +ggplot(dat.l, aes(x=year,y=value,color=cname)) + 
    +  geom_point() + geom_line() +
    +  geom_text(data = dat.l %>% 
    +              group_by(cname) %>% 
    +              filter(year == max(year)),
    +          aes(x=year,y=value,label=cname),
    +          hjust=1,vjust=-1,size=3,alpha=.8) +
    +  facet_wrap(~var, scales="free") +
    +  theme_minimal() +  
    +  theme(legend.position = "none") +
    +  labs(title = "Plotting QoG Standard data",
    +       caption = "Data: QoG Standard data")
    +

    +

    OECD data

    +

    OECD data includes 1006 variables, but from a smaller number of wealthier countries of 36. In the example below four indicators:

      -
    1. Total social expenditure (public) oecd_socexpnd_t1a
    2. -
    3. Income inequality: Gini coefficient; level; late 2000s oecd_incinequal_t1a
    4. -
    5. Gross national income per capita oecd_natinccap_t1
    6. -
    7. General government debt oecd_govdebt_t1
    8. +
    9. Total expenditure on health oecd_pphlthxp_t1c
    10. +
    11. Income inequality: GINI index (World Bank estimate) wdi_gini
    12. +
    13. Gross National Income per Capita oecd_natinccap_t1
    14. +
    15. Adjusted general government debt-to-GDP (excl. unfunded pension liability) oecd_govdebt_t1

    We will include all the countries and all the years included in the data.

    -
    library(rqog)
    -# Download a local coppy of the file
    -dat <- read_qog("oecd", "time-series")
    -# Subset the data
    -dat2 <- dat[c("cname","year","oecd_socexpnd_t1a",
    -                            "oecd_incinequal_t1a",
    -                            "oecd_natinccap_t1",
    -                            "oecd_govdebt_t1")]
    -# gather to long format
    -library(tidyr)
    -dat.l <- gather(dat2, "var", "value", 3:6)
    -dat.l <- dat.l[!is.na(dat.l$value), ]
    -library(ggplot2)
    -# Plot the data
    -ggplot(dat.l, aes(x=year,y=value,color=cname)) + 
    -  geom_point() + geom_line() +
    -  geom_text(data=merge(dat.l,aggregate(year ~ cname, dat.l, max),
    -                     by=c("year","cname")),
    -          aes(x=year,y=value,label=cname),
    -          hjust=1,vjust=-1,size=3,alpha=.8) +
    -  facet_wrap(~var, scales="free") +
    -  theme(legend.position="none")
    -

    -
    sessionInfo()
    -
    ## R version 3.2.3 (2015-12-10)
    -## Platform: x86_64-pc-linux-gnu (64-bit)
    -## Running under: Ubuntu 14.04.3 LTS
    +
    library(rqog)
    +# Download a local coppy of the file
    +oecd <- read_qog("oecd", "time-series")
    +# Subset the data
    +dat.l <- oecd %>% 
    +  # select variables
    +  select(cname,year,oecd_pphlthxp_t1c,wdi_gini,oecd_natinccap_t1,oecd_govdebt_t1) %>% 
    +  # gather to long format
    +  gather(., var, value, 3:6) %>% 
    +  # remove NA values
    +  filter(!is.na(value))
    +
    +# Plot the data
    +# Plot
    +ggplot(dat.l, aes(x=year,y=value,color=cname)) + 
    +  geom_point() + geom_line() +
    +  geom_text(data = dat.l %>% 
    +              group_by(var,cname) %>% 
    +              filter(year == max(year)),
    +          aes(x=year,y=value,label=cname),
    +          hjust=1,vjust=-1,size=3,alpha=.8) +
    +  facet_wrap(~var, scales="free") +
    +  theme_minimal() +  
    +  theme(legend.position = "none") +
    +  labs(title = "Plotting QoG OECD data",
    +       caption = "Data: QoG OECD data")
    +

    +
    +
    +

    Work with metadata and factor indicators

    +

    Packages is shipped with seven metadatas for each year (2016-2020) meta_basic_cs_2020, meta_basic_ts_2020, meta_std_cs_2020, meta_std_ts_2020, meta_oecd_cs_2020 and meta_oecd_ts_2020. Data frames are generated from original spss versions of data using tidymetadata::create_metadata()-function.

    +

    Browsing metadata

    +

    You can browse the content by applying grepl to name column. Let’s find indicators containing term Corruption either in lower or uppercase.

    +
    library(rqog)
    +meta_basic_ts_2020[grepl("Corruption", meta_basic_ts_2020$name, ignore.case = TRUE),]
    +
    ## # A tibble: 9 x 5
    +##   code       name                               value label                class
    +##   <chr>      <chr>                              <dbl> <chr>                <chr>
    +## 1 bci_bci    The Bayesian Corruption Indicator     NA <NA>                 nume~
    +## 2 ccp_cc     Corruption Commission Present in ~     1 1. Yes               fact~
    +## 3 ccp_cc     Corruption Commission Present in ~     2 2. No                fact~
    +## 4 ccp_cc     Corruption Commission Present in ~    90 90. left explicitly~ fact~
    +## 5 ccp_cc     Corruption Commission Present in ~    96 96. Other            fact~
    +## 6 ccp_cc     Corruption Commission Present in ~    97 97. Unable to deter~ fact~
    +## 7 vdem_corr  Political corruption index            NA <NA>                 nume~
    +## 8 wbgi_cce   Control of Corruption, Estimate       NA <NA>                 nume~
    +## 9 wdi_tacpsr CPIA transparency-accountability-~    NA <NA>                 nume~
    +

    Assigning labels to values with metadata

    +

    The data rqoq imports to R is in .csv-format without the labels and names shipped together with spss or Stata formats. As such it is the desired format to work with in R, especially with numeric indicators. However, many of the indicators in QoG are factors meaning that they have discrete values with a corresponding label. You can use the metadatas to assign labels for values of such indicators. Lets take the ccp_cc as an example below and first print the value and label colums of the data.

    +
    meta_basic_ts_2020 %>% filter(code == "ccp_cc") %>% select(value,label)
    +
    ## # A tibble: 5 x 2
    +##   value label                                  
    +##   <dbl> <chr>                                  
    +## 1     1 1. Yes                                 
    +## 2     2 2. No                                  
    +## 3    90 90. left explicitly to non-constitution
    +## 4    96 96. Other                              
    +## 5    97 97. Unable to determine
    +

    Currently we have basic data in R in an object called basic. Lets see the frequencies of each value

    +
    basic %>% count(ccp_cc)
    +
    ##   ccp_cc    n
    +## 1      1  507
    +## 2      2 8850
    +## 3     96  246
    +## 4     NA 6222
    +

    Now, using the metadata with assign values with corresponding labels

    +
    basic %>% 
    +  count(ccp_cc) %>% 
    +  mutate(ccp_cc_lab = meta_basic_ts_2020[meta_basic_ts_2020$code == "ccp_cc",]$label[match(ccp_cc,meta_basic_ts_2020[meta_basic_ts_2020$code == "ccp_cc",]$value)])
    +
    ##   ccp_cc    n ccp_cc_lab
    +## 1      1  507     1. Yes
    +## 2      2 8850      2. No
    +## 3     96  246  96. Other
    +## 4     NA 6222       <NA>
    +

    So, lets find two factor variables with few more values from the cross-sectional data

    +
    meta_basic_cs_2020 %>% 
    +  filter(class =="factor") %>% 
    +  group_by(code) %>% 
    +  summarise(n_of_values = n()) %>% 
    +  arrange(desc(n_of_values))
    +
    ## # A tibble: 26 x 2
    +##    code         n_of_values
    +##    <chr>              <int>
    +##  1 gol_pr                28
    +##  2 ht_regtype            20
    +##  3 ht_regtype1           13
    +##  4 gol_est_spec          12
    +##  5 ht_colonial           11
    +##  6 ht_region             10
    +##  7 cpds_tg                7
    +##  8 ccp_slave              6
    +##  9 ccp_cc                 5
    +## 10 ccp_childwrk           5
    +## # ... with 16 more rows
    +

    Lets take these two factors and summarise the regime types per regions

    +
    meta_basic_cs_2020 %>% 
    +  filter(code %in% c("ht_region","ht_regtype")) %>% 
    +  distinct(code, .keep_all = TRUE)
    +
    ## # A tibble: 2 x 5
    +##   code       name                      value label                         class
    +##   <chr>      <chr>                     <dbl> <chr>                         <chr>
    +## 1 ht_region  The Region of the Country     1 1. Eastern Europe and post S~ fact~
    +## 2 ht_regtype Regime Type                   1 limited multiparty            fact~
    +
    # lets download the cross-sectional data first
    +basic_cs <- read_qog(which_data = "basic", data_type = "cross-sectional")
    +
    +plot_d <- basic_cs %>% 
    +  # group by region
    +  group_by(ht_region) %>% 
    +  # count per group frequencies of each regime type
    +  count(ht_regtype) %>%
    +  ungroup() %>% 
    +  # label
    +  mutate(ht_region_lab = meta_basic_ts_2020[meta_basic_ts_2020$code == "ht_region",]$label[match(ht_region,meta_basic_ts_2020[meta_basic_ts_2020$code == "ht_region",]$value)],
    +         ht_regtype_lab = meta_basic_ts_2020[meta_basic_ts_2020$code == "ht_regtype",]$label[match(ht_regtype,meta_basic_ts_2020[meta_basic_ts_2020$code == "ht_regtype",]$value)]) %>% 
    +  na.omit()
    +head(plot_d)
    +
    ## # A tibble: 6 x 5
    +##   ht_region ht_regtype     n ht_region_lab                     ht_regtype_lab   
    +##       <int>      <int> <int> <chr>                             <chr>            
    +## 1         1          1     9 1. Eastern Europe and post Sovie~ limited multipar~
    +## 2         1          8     2 1. Eastern Europe and post Sovie~ one-party        
    +## 3         1        100    16 1. Eastern Europe and post Sovie~ democracy        
    +## 4         2          1     3 2. Latin America                  limited multipar~
    +## 5         2          8     1 2. Latin America                  one-party        
    +## 6         2        100    16 2. Latin America                  democracy
    +

    Then we can create a simple bar plot

    +
    # indicators names from metadata
    +ind_name <- unique(meta_basic_cs_2020[meta_basic_cs_2020$code == "ht_regtype",]$name)
    +group_name <- unique(meta_basic_cs_2020[meta_basic_cs_2020$code == "ht_region",]$name)
    +
    +ggplot(plot_d, aes(x=ht_regtype_lab,y=n)) + 
    +  geom_col() + 
    +  facet_wrap(~ht_region_lab, scales = "free") + 
    +  theme_minimal() + theme(axis.text.x = element_text(angle = 90, size = 7)) +
    +  labs(title = paste0(ind_name," by ",group_name ), 
    +       caption = "Data: Quality of Government institute", x = NULL, y = "number of countries") +
    +  coord_flip()
    +

    +
    sessionInfo()
    +
    ## R version 4.1.1 (2021-08-10)
    +## Platform: x86_64-w64-mingw32/x64 (64-bit)
    +## Running under: Windows 10 x64 (build 19043)
    +## 
    +## Matrix products: default
     ## 
     ## locale:
    -##  [1] LC_CTYPE=fi_FI.UTF-8       LC_NUMERIC=C              
    -##  [3] LC_TIME=fi_FI.UTF-8        LC_COLLATE=fi_FI.UTF-8    
    -##  [5] LC_MONETARY=fi_FI.UTF-8    LC_MESSAGES=fi_FI.UTF-8   
    -##  [7] LC_PAPER=fi_FI.UTF-8       LC_NAME=C                 
    -##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
    -## [11] LC_MEASUREMENT=fi_FI.UTF-8 LC_IDENTIFICATION=C       
    +## [1] LC_COLLATE=Spanish_Spain.1252  LC_CTYPE=Spanish_Spain.1252   
    +## [3] LC_MONETARY=Spanish_Spain.1252 LC_NUMERIC=C                  
    +## [5] LC_TIME=Spanish_Spain.1252    
     ## 
     ## attached base packages:
     ## [1] stats     graphics  grDevices utils     datasets  methods   base     
     ## 
     ## other attached packages:
    -## [1] ggplot2_2.0.0 tidyr_0.4.0   rqog_0.1.3   
    +## [1] tidyr_1.1.4   ggplot2_3.3.5 dplyr_1.0.7   rqog_0.4.2021
     ## 
     ## loaded via a namespace (and not attached):
    -##  [1] Rcpp_0.12.3      knitr_1.12.3     magrittr_1.5     munsell_0.4.2   
    -##  [5] colorspace_1.2-6 R6_2.1.2         stringr_1.0.0    plyr_1.8.3      
    -##  [9] dplyr_0.4.3      tools_3.2.3      parallel_3.2.3   grid_3.2.3      
    -## [13] gtable_0.1.2     DBI_0.3.1        htmltools_0.3    yaml_2.1.13     
    -## [17] lazyeval_0.1.10  assertthat_0.1   digest_0.6.9     formatR_1.2.1   
    -## [21] evaluate_0.8     rmarkdown_0.9.2  labeling_0.3     stringi_1.0-1   
    -## [25] scales_0.3.0
    +## [1] Rcpp_1.0.7 prettyunits_1.1.1 ps_1.6.0 assertthat_0.2.1 +## [5] rprojroot_2.0.2 digest_0.6.28 utf8_1.2.2 R6_2.5.1 +## [9] cellranger_1.1.0 evaluate_0.14 highr_0.9 pillar_1.6.3 +## [13] rlang_0.4.11 readxl_1.3.1 rstudioapi_0.13 callr_3.7.0 +## [17] jquerylib_0.1.4 rmarkdown_2.11 desc_1.4.0 labeling_0.4.2 +## [21] devtools_2.4.2 stringr_1.4.0 munsell_0.5.0 compiler_4.1.1 +## [25] xfun_0.26 pkgconfig_2.0.3 pkgbuild_1.2.0 htmltools_0.5.2 +## [29] tidyselect_1.1.1 tibble_3.1.5 fansi_0.5.0 crayon_1.4.1 +## [33] withr_2.4.2 grid_4.1.1 jsonlite_1.7.2 gtable_0.3.0 +## [37] lifecycle_1.0.1 DBI_1.1.1 magrittr_2.0.1 scales_1.1.1 +## [41] cli_3.0.1 stringi_1.7.5 cachem_1.0.6 farver_2.1.0 +## [45] fs_1.5.0 remotes_2.4.1 testthat_3.1.0 bslib_0.3.1 +## [49] ellipsis_0.3.2 generics_0.1.0 vctrs_0.3.8 tools_4.1.1 +## [53] forcats_0.5.1 glue_1.4.2 purrr_0.3.4 hms_1.1.1 +## [57] processx_3.5.2 pkgload_1.2.2 fastmap_1.1.0 yaml_2.2.1 +## [61] colorspace_2.0-2 sessioninfo_1.1.1 memoise_2.0.0 knitr_1.36 +## [65] haven_2.4.3 sass_0.4.0 usethis_2.0.1
    -
    - -