Notes


Setup packages and plotting for the notebook:

# Check packages
source("../tools/package_setup.R")
# Load packages
library(tidyverse)
library(cowplot)
library(patchwork)
library(kableExtra)
library(ggrastr)
library(ggdist)
library(ggridges)
# Code display options
knitr::opts_chunk$set(tidy.opts=list(width.cutoff=60),tidy=FALSE, echo = TRUE, message=FALSE, warning=FALSE, fig.align="center", fig.retina = 2)
# Load plotting tools
source("../tools/plotting_tools.R")
#Modify the plot theme
theme_set(theme_notebook())

S5B - pHelper variant efficiencies

df_variants <- read_csv("../../data/low_throughput_experiments/2023_04_pHelper_variant_efficiencies.csv" )%>% #read in csv
  mutate(eff = Kan_count / LB_count) %>% group_by(helper_plasmid, locus) %>% mutate(avg_eff = mean(eff)) #calculate efficiency and average efficiency for replicates

df_variants %>% kable() %>% kable_styling() %>% scroll_box(height = '250px')
helper_plasmid replicate locus Kan_count LB_count eff avg_eff
pHelper_Beta 1 galK 86 4400000 0.0000195 0.0000338
pHelper_Beta 2 galK 120 2500000 0.0000480 0.0000338
pHelper_Beta 1 hisA 220 2600000 0.0000846 0.0000981
pHelper_Beta 2 hisA 480 4300000 0.0001116 0.0000981
pHelper_Beta 1 metA 215 3200000 0.0000672 0.0000666
pHelper_Beta 2 metA 238 3600000 0.0000661 0.0000666
pHelper_Beta 1 leuD 40 5200000 0.0000077 0.0000065
pHelper_Beta 2 leuD 21 4000000 0.0000052 0.0000065
pHelper_Beta 1
59 3300000 0.0000179 0.0000194
pHelper_Beta 2
100 4800000 0.0000208 0.0000194
pHelper_NoMutL 1 galK 52 830000 0.0000627 0.0000868
pHelper_NoMutL 2 galK 61 550000 0.0001109 0.0000868
pHelper_NoMutL 1 hisA 180 660000 0.0002727 0.0002043
pHelper_NoMutL 2 hisA 110 810000 0.0001358 0.0002043
pHelper_NoMutL 1 metA 37 570000 0.0000649 0.0000557
pHelper_NoMutL 2 metA 34 730000 0.0000466 0.0000557
pHelper_NoMutL 1 leuD 18 730000 0.0000247 0.0000235
pHelper_NoMutL 2 leuD 17 760000 0.0000224 0.0000235
pHelper_NoMutL 1
2 600000 0.0000033 0.0000042
pHelper_NoMutL 2
4 800000 0.0000050 0.0000042
pHelper_Ec1_LAA 1 galK 38 4300000 0.0000088 0.0000083
pHelper_Ec1_LAA 2 galK 58 7500000 0.0000077 0.0000083
pHelper_Ec1_LAA 1 hisA 118 7200000 0.0000164 0.0000134
pHelper_Ec1_LAA 2 hisA 60 5800000 0.0000103 0.0000134
pHelper_Ec1_LAA 1 metA 47 4500000 0.0000104 0.0000108
pHelper_Ec1_LAA 2 metA 59 5300000 0.0000111 0.0000108
pHelper_Ec1_LAA 1 leuD 37 3600000 0.0000103 0.0000061
pHelper_Ec1_LAA 2 leuD 9 4900000 0.0000018 0.0000061
pHelper_Ec1_LAA 1
14 5000000 0.0000028 0.0000031
pHelper_Ec1_LAA 2
22 6300000 0.0000035 0.0000031
df_gold <- read_csv("../../data/low_throughput_experiments/2022_08_31_gold_stds.csv") %>% #read in csv
  mutate(eff = Kan_count / LB_count) %>% group_by(locus) %>% mutate(avg_eff = mean(eff)) %>%  #calculate efficiency and average efficiency for replicates")
  mutate(helper_plasmid = 'pHelper_Ec1_Original')

df_gold
## # A tibble: 15 × 7
## # Groups:   locus [5]
##    locus replicate LB_count Kan_count       eff   avg_eff helper_plasmid      
##    <chr>     <dbl>    <dbl>     <dbl>     <dbl>     <dbl> <chr>               
##  1 galK          1   870000       870 0.001     0.00146   pHelper_Ec1_Original
##  2 galK          2  1140000      1560 0.00137   0.00146   pHelper_Ec1_Original
##  3 galK          3   760000      1520 0.002     0.00146   pHelper_Ec1_Original
##  4 hisA          1   970000      4100 0.00423   0.00457   pHelper_Ec1_Original
##  5 hisA          2   860000      2600 0.00302   0.00457   pHelper_Ec1_Original
##  6 hisA          3   990000      6400 0.00646   0.00457   pHelper_Ec1_Original
##  7 metA          1   900000      2300 0.00256   0.00354   pHelper_Ec1_Original
##  8 metA          2   600000      3300 0.0055    0.00354   pHelper_Ec1_Original
##  9 metA          3   740000      1900 0.00257   0.00354   pHelper_Ec1_Original
## 10 leuD          1   910000       350 0.000385  0.000386  pHelper_Ec1_Original
## 11 leuD          2   850000       310 0.000365  0.000386  pHelper_Ec1_Original
## 12 leuD          3  1100000       450 0.000409  0.000386  pHelper_Ec1_Original
## 13 -             1   960000        44 0.0000458 0.0000562 pHelper_Ec1_Original
## 14 -             2   800000        52 0.000065  0.0000562 pHelper_Ec1_Original
## 15 -             3   950000        55 0.0000579 0.0000562 pHelper_Ec1_Original
df_eff <- bind_rows(df_variants, df_gold) %>%   
  mutate(helper_plasmid = factor(helper_plasmid, levels = c('pHelper_Ec1_Original','pHelper_Beta','pHelper_NoMutL','pHelper_Ec1_LAA' ))) %>% 
  mutate(locus = factor(locus, levels = c('galK','hisA','metA','leuD','-')))

df_eff
## # A tibble: 45 × 7
## # Groups:   helper_plasmid, locus [20]
##    helper_plasmid replicate locus Kan_count LB_count        eff    avg_eff
##    <fct>              <dbl> <fct>     <dbl>    <dbl>      <dbl>      <dbl>
##  1 pHelper_Beta           1 galK         86  4400000 0.0000195  0.0000338 
##  2 pHelper_Beta           2 galK        120  2500000 0.000048   0.0000338 
##  3 pHelper_Beta           1 hisA        220  2600000 0.0000846  0.0000981 
##  4 pHelper_Beta           2 hisA        480  4300000 0.000112   0.0000981 
##  5 pHelper_Beta           1 metA        215  3200000 0.0000672  0.0000666 
##  6 pHelper_Beta           2 metA        238  3600000 0.0000661  0.0000666 
##  7 pHelper_Beta           1 leuD         40  5200000 0.00000769 0.00000647
##  8 pHelper_Beta           2 leuD         21  4000000 0.00000525 0.00000647
##  9 pHelper_Beta           1 -            59  3300000 0.0000179  0.0000194 
## 10 pHelper_Beta           2 -           100  4800000 0.0000208  0.0000194 
## # … with 35 more rows
#Calculate negative control values for ORBIT and lambda red
#orbit_bg <- (df_lam_gold %>% filter(locus=='-' & exp == 'ORBIT'))$avg_eff[1]
#lam_bg <-  (df_lam_gold %>% filter(locus=='-' & exp == 'lambda_red'))$avg_eff[1]

#Plot individual datapoints, mean dots and crossbars and negative control X's
plot_eff <- ggplot(df_eff %>% filter(locus!='-'), aes(x = helper_plasmid, y = eff , color = locus)) + 
  #geom_point(data = . %>% filter(replicate ==1), aes(y = bg), shape = 4, color= 'light gray')+
  stat_summary(fun = 'mean', geom = 'crossbar',width = 0.5, size = 0.25)+
  stat_summary(fun = 'mean', geom = 'point')+
  geom_point(position = position_jitterdodge(dodge.width = 1, jitter.width = 1), shape = 21) + 
  facet_grid(~locus)+
  scale_color_viridis_d()+
  scale_y_log10(labels = scales::label_percent(accuracy = 0.001), breaks = c(0.00001,0.0001, 0.001, 0.01) ) +#
  #scale_x_discrete(labels = c('ORBIT','λRed'))+
  labs(y = 'Efficiency', x = NULL, fill = 'Strand') + guides(color = 'none') +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
  

plot_eff

#Plot individual datapoints, mean dots and crossbars and negative control X's

plot_eff_2 <- ggplot(df_eff %>% filter(locus!='-'), aes(x = locus, y = eff , color = locus)) + 
  geom_hline(data = df_eff %>% filter(locus == '-' & replicate ==1), aes(yintercept = avg_eff), linetype = 2, color= 'gray')+
  stat_summary(fun = 'mean', geom = 'crossbar',width = 0.5, size = 0.25)+
  stat_summary(fun = 'mean', geom = 'point')+
  geom_point(position = position_jitterdodge(dodge.width = 1, jitter.width = 1), shape = 21) + 
  facet_grid(~helper_plasmid)+
  scale_color_viridis_d()+
  scale_y_log10(labels = scales::label_percent(accuracy = 0.001), breaks = c(0.00001,0.0001, 0.001, 0.01) ) +#
  #scale_x_discrete(labels = c('ORBIT','λRed'))+
  labs(y = 'Efficiency', x = NULL, fill = 'Strand') + guides(color = 'none') +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
  

plot_eff_2

S5C - pHelper variant background SNPs

df_breseq_1 <-  read_csv("../../data/low_throughput_experiments/2023_breseq_WT_49kb_data.csv")

df_breseq_1
## # A tibble: 108 × 3
##    locus                 sample mutation
##    <chr>                  <dbl> <chr>   
##  1 missing coverage (MC)      1 deletion
##  2 missing coverage (MC)      2 deletion
##  3 missing coverage (MC)      3 deletion
##  4 missing coverage (MC)      4 deletion
##  5 crl                        1 deletion
##  6 crl                        2 deletion
##  7 crl                        3 deletion
##  8 crl                        4 deletion
##  9 b4395                      1 none    
## 10 b4395                      2 none    
## # … with 98 more rows
df_ids <- tibble(sample = 1:4, 
                      plasmid = c('WT', 'pHelper_Ec1_Original','pHelper_Ec1_Original','pHelper_Ec1_Original'), 
                      deletion = c('none','none','galK_original','134kb'),
                      replicate = 1:4)

df_bre_id_1 <- left_join(df_breseq_1, df_ids, by = 'sample') %>% 
  mutate(plasmid = factor(plasmid, levels = c('WT','pHelper_Ec1_Original' )))

df_bre_id_1
## # A tibble: 108 × 6
##    locus                 sample mutation plasmid              deletion   repli…¹
##    <chr>                  <dbl> <chr>    <fct>                <chr>        <int>
##  1 missing coverage (MC)      1 deletion WT                   none             1
##  2 missing coverage (MC)      2 deletion pHelper_Ec1_Original none             2
##  3 missing coverage (MC)      3 deletion pHelper_Ec1_Original galK_orig…       3
##  4 missing coverage (MC)      4 deletion pHelper_Ec1_Original 134kb            4
##  5 crl                        1 deletion WT                   none             1
##  6 crl                        2 deletion pHelper_Ec1_Original none             2
##  7 crl                        3 deletion pHelper_Ec1_Original galK_orig…       3
##  8 crl                        4 deletion pHelper_Ec1_Original 134kb            4
##  9 b4395                      1 none     WT                   none             1
## 10 b4395                      2 none     pHelper_Ec1_Original none             2
## # … with 98 more rows, and abbreviated variable name ¹​replicate
df_breseq_2 <- read_csv("../../data/low_throughput_experiments/2023_mut_rate_breseq_summary.csv")

df_breseq_2
## # A tibble: 300 × 3
##    locus                 sample mutation
##    <chr>                  <dbl> <chr>   
##  1 missing coverage (MC)      1 deletion
##  2 missing coverage (MC)      2 deletion
##  3 missing coverage (MC)      3 deletion
##  4 missing coverage (MC)      4 deletion
##  5 missing coverage (MC)      5 deletion
##  6 missing coverage (MC)      6 deletion
##  7 missing coverage (MC)      7 deletion
##  8 missing coverage (MC)      8 deletion
##  9 missing coverage (MC)      9 deletion
## 10 missing coverage (MC)     10 deletion
## # … with 290 more rows
df_plasmids <- tibble(sample = 1:12, 
                      plasmid = c(rep('pHelper_Beta',3),rep('pHelper_NoMutL',3),rep('pHelper_Ec1_LAA',3),rep('pHelper_Ec1_Original',3)), 
                      deletion = rep(c('galK','hisA','metA'),4),
                      replicate = rep(c(1,2,3), 4))

df_bre_id_2 <- left_join(df_breseq_2, df_plasmids, by = 'sample') %>% 
  mutate(plasmid = factor(plasmid, levels = c('pHelper_Ec1_Original','pHelper_Beta','pHelper_NoMutL','pHelper_Ec1_LAA' )))

df_bre_plasmid <- bind_rows(df_bre_id_1, df_bre_id_2)

df_bre_plasmid
## # A tibble: 408 × 6
##    locus                 sample mutation plasmid              deletion   repli…¹
##    <chr>                  <dbl> <chr>    <fct>                <chr>        <dbl>
##  1 missing coverage (MC)      1 deletion WT                   none             1
##  2 missing coverage (MC)      2 deletion pHelper_Ec1_Original none             2
##  3 missing coverage (MC)      3 deletion pHelper_Ec1_Original galK_orig…       3
##  4 missing coverage (MC)      4 deletion pHelper_Ec1_Original 134kb            4
##  5 crl                        1 deletion WT                   none             1
##  6 crl                        2 deletion pHelper_Ec1_Original none             2
##  7 crl                        3 deletion pHelper_Ec1_Original galK_orig…       3
##  8 crl                        4 deletion pHelper_Ec1_Original 134kb            4
##  9 b4395                      1 none     WT                   none             1
## 10 b4395                      2 none     pHelper_Ec1_Original none             2
## # … with 398 more rows, and abbreviated variable name ¹​replicate
ggplot(df_bre_plasmid %>% mutate(mutation = ifelse(mutation =='none',NA,mutation)) %>% filter(deletion != 'galK_original'), aes(x = deletion, y = locus, fill = mutation)) + 
  geom_tile() + facet_grid(~plasmid, scales = 'free') + scale_fill_viridis_d() + theme(axis.text.x = element_text(angle = 45, hjust = 1)) + 
  scale_x_discrete(limits = c('none','galK','hisA','metA','134kb'))

df_bre_id_1 %>% 
  mutate(mutation = ifelse(mutation =='none',NA,mutation)) %>% 
  mutate(deletion = factor(deletion, levels = c('none','galK_original','134kb'))) %>% 
  arrange(locus) %>% 
  ggplot(aes(x = deletion, y = locus, fill = mutation)) + 
  geom_tile(color = 'black') + facet_grid(~plasmid, scales = 'free',space = 'free_x') + scale_fill_viridis_d() + theme(axis.text.x = element_text(angle = 45, hjust = 1))

note in the helper plasmid only strain - b0064 is the araC from the plasmid, which has a single mutation in it. b4170 is mutL, which intentionally has a mutation in it on the plasmid. The two mutants galK original and 134kb both had the helper plasmid cured. You can see that all strains retain the 4 mutations in the WT, except for the 134kb, which lost part of that region due to the large deletion. Note that the helper plasmid stock accumulated a mutation in b1188 which was passed to the other two strains.

plot_locus_snps <- df_bre_id_2 %>% 
  mutate(mutation = ifelse(mutation =='none',NA,mutation)) %>% 
  mutate(locus = ifelse(locus == 'missing coverage (MC)', 'MC', locus)) %>% 
  #mutate(deletion = factor(deletion, levels = c('none','galK_original','134kb'))) %>% 
  arrange(locus) %>% 
  ggplot(aes(x = deletion, y = locus, fill = mutation)) + 
  geom_tile(color = 'black') + facet_grid(~plasmid, scales = 'free',space = 'free_x') + scale_fill_viridis_d() + theme(axis.text.x = element_text(angle = 45, hjust = 1))

plot_locus_snps

S5D - pHelper variant SNPs summary

df_mut_counts <- df_bre_id_2 %>% 
  filter(mutation != 'none') %>% 
  group_by(sample, plasmid, replicate)%>% 
  summarise(count = n()) %>% 
  group_by(plasmid) %>% 
  mutate(avg = mean(count))

df_mut_counts
## # A tibble: 12 × 5
## # Groups:   plasmid [4]
##    sample plasmid              replicate count   avg
##     <dbl> <fct>                    <dbl> <int> <dbl>
##  1      1 pHelper_Beta                 1     6  5.33
##  2      2 pHelper_Beta                 2     6  5.33
##  3      3 pHelper_Beta                 3     4  5.33
##  4      4 pHelper_NoMutL               1     4  4   
##  5      5 pHelper_NoMutL               2     4  4   
##  6      6 pHelper_NoMutL               3     4  4   
##  7      7 pHelper_Ec1_LAA              1     4  4.67
##  8      8 pHelper_Ec1_LAA              2     5  4.67
##  9      9 pHelper_Ec1_LAA              3     5  4.67
## 10     10 pHelper_Ec1_Original         1     7  9.67
## 11     11 pHelper_Ec1_Original         2    12  9.67
## 12     12 pHelper_Ec1_Original         3    10  9.67
plot_muts <- ggplot(df_mut_counts, aes(x = plasmid, y = count)) + 
  geom_hline(yintercept = 4, linetype =2, color = 'gray')+ 
  stat_summary(fun = 'mean', geom = 'crossbar',width = 0.25, size = 0.25)+
  stat_summary(fun = 'mean', geom = 'point')+
  geom_jitter(width = 0.1, height = 0, shape =21) + 
  labs(x = NULL, y = "Whole genome mutation count")+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

plot_muts

S5E - pHelper_V2 efficiencies

df_fixed <- read_csv("../../data/low_throughput_experiments/2023_06_06_mutation_rate_fixed_pHelper_eff.csv") %>% #read in csv
  mutate(eff = Kan_count / LB_count) %>% group_by(helper_plasmid, locus) %>% mutate(avg_eff = mean(eff)) #%>% #calculate efficiency and average efficiency for replicates")
  #mutate(helper_plasmid = factor(helper_plasmid, levels = c('pHelper_Ec1_original','pHelper_Ec1_fixed','pHelper_Ec1_noMutL_fixed' ))) %>% 
  #mutate(locus = factor(locus, levels = c('galK','hisA','metA','leuD','pInt_only')))

df_temp <- read_csv("../../data/low_throughput_experiments/2023_12_14_pHelperV2TSamp_goldstd.csv") %>% 
  mutate(eff = Kan / LB) %>% 
  group_by(locus) %>% mutate(avg_eff = mean(eff, na.rm = T)) %>%  #calculate efficiency and average efficiency for replicates
  mutate(helper_plasmid = 'pHelper_V2_TS_ampR')


df_all <- bind_rows(df_fixed, df_temp) %>% 
    mutate(helper_plasmid = factor(helper_plasmid, levels = c('pHelper_Ec1_original','pHelper_Ec1_fixed','pHelper_Ec1_noMutL_fixed', 'pHelper_V2_TS_ampR'))) %>% 
    mutate(locus = factor(locus, levels =c('galK','hisA','metA','leuD','pInt_only')))
#Plot individual datapoints, mean dots and crossbars and negative control X's
  
plot_fixed_eff <- ggplot(df_all %>% filter(locus!='pInt_only') %>% filter(helper_plasmid !='pHelper_Ec1_fixed'), aes(x = locus, y = eff , color = locus)) + 
  geom_hline(data = df_all %>% filter(locus == 'pInt_only' & replicate ==1)%>% filter(helper_plasmid !='pHelper_Ec1_fixed'), aes(yintercept = avg_eff), linetype = 2, color= 'gray')+
  #geom_hline(data = df_fixed %>% filter(locus == 'pInt_only'), aes(yintercept = eff), linetype = 2, color= 'gray')+
  stat_summary(fun = 'mean', geom = 'crossbar',width = 0.5, size = 0.25)+
  stat_summary(fun = 'mean', geom = 'point')+
  geom_point(position = position_jitterdodge(dodge.width = 1, jitter.width = 1), shape = 21) + 
  facet_grid(~helper_plasmid)+
  scale_color_viridis_d()+
  scale_y_log10(labels = scales::label_percent(accuracy = 0.001), breaks = c(0.00001,0.0001, 0.001, 0.01) ) +#
  #scale_x_discrete(labels = c('ORBIT','λRed'))+
  labs(y = 'Efficiency', x = NULL, fill = 'Strand') + guides(color = 'none') +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

plot_fixed_eff

S5G - pHelper_TS_V2_ampR curing rate

df_loss <- read_csv("../../data/low_throughput_experiments/2023_12_14_pHelperV2TSamp_loss_rate.csv") %>% 
  mutate(not_lost = Carb / LB) %>% 
  mutate(loss_rate = 1-not_lost) %>% 
  group_by(locus) %>% mutate(avg_eff = mean(loss_rate, na.rm = T)) %>%  #calculate efficiency and average efficiency for replicates
  mutate(locus = factor(locus, levels =c('galK','hisA','metA','leuD','pInt_only')))

loss_rate_avg <- mean(df_loss$loss_rate)

plot_loss <- ggplot(df_loss, aes(x = locus, y = loss_rate , color = locus)) + 
  geom_hline(yintercept = loss_rate_avg, linetype = 2, color = 'black')+
  stat_summary(fun = 'mean', geom = 'crossbar',width = 0.5, size = 0.25)+
  stat_summary(fun = 'mean', geom = 'point')+
  geom_point(position = position_jitterdodge(dodge.width = 1, jitter.width = 1), shape = 21) + 
  #facet_grid(~locus)+
  #scale_color_viridis_d()+
  scale_color_manual( values = c("#440154FF", "#31688EFF", "#35B779FF" ,"#FDE725FF","gray"))+
  scale_y_continuous(labels = scales::label_percent(), limits = c(0, NA)) + 
  #scale_y_log10(labels = scales::label_percent(accuracy = 0.0001), limits = c(0.0000075, 0.01)) + 
  labs(y = 'Helper loss rate \n (Carb sensitive / Total)', x = NULL) + guides(color = 'none') +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

plot_loss

Create figure

theme_set(theme_figure())


subfig1 <- plot_grid(plot_muts,  plot_locus_snps + guides(fill = 'none'), ncol = 2, rel_widths = c(2,3))
subfig2 <- plot_grid(NULL, NULL, NULL, plot_loss, ncol = 2, nrow = 2, rel_widths = c(1,1), rel_heights = c(1, 2))

fig_mut_vars <- plot_grid(NULL,plot_eff_2,plot_fixed_eff, subfig1, NULL, subfig2, ncol = 2,rel_widths = c(2,3),
                   align = 'hv', axis = 'lr', scale = 1,
                   labels = c('','B','C','D','E',''))


fig_mut_vars

save_plot("../../figures/r_pdf_figs/supp_figs/supp_mut_rate_vars.pdf", fig_mut_vars, base_width = 8, base_height = 9)
sessionInfo()
## R version 4.2.0 (2022-04-22)
## Platform: x86_64-apple-darwin17.0 (64-bit)
## Running under: macOS Big Sur/Monterey 10.16
## 
## Matrix products: default
## BLAS:   /Library/Frameworks/R.framework/Versions/4.2/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.2/Resources/lib/libRlapack.dylib
## 
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] ggridges_0.5.4    ggdist_3.2.1      patchwork_1.1.2   ggrastr_1.0.1    
##  [5] kableExtra_1.3.4  cowplot_1.1.1     viridis_0.6.2     viridisLite_0.4.1
##  [9] knitr_1.41        forcats_0.5.2     stringr_1.5.0     dplyr_1.1.0      
## [13] purrr_0.3.5       readr_2.1.3       tidyr_1.2.1       tibble_3.1.8     
## [17] ggplot2_3.4.0     tidyverse_1.3.2  
## 
## loaded via a namespace (and not attached):
##  [1] httr_1.4.4           sass_0.4.4           bit64_4.0.5         
##  [4] vroom_1.6.0          jsonlite_1.8.3       modelr_0.1.10       
##  [7] bslib_0.4.1          assertthat_0.2.1     distributional_0.3.1
## [10] highr_0.9            vipor_0.4.5          googlesheets4_1.0.1 
## [13] cellranger_1.1.0     yaml_2.3.6           pillar_1.8.1        
## [16] backports_1.4.1      glue_1.6.2           digest_0.6.30       
## [19] rvest_1.0.3          colorspace_2.0-3     htmltools_0.5.4     
## [22] pkgconfig_2.0.3      broom_1.0.1          haven_2.5.1         
## [25] scales_1.2.1         webshot_0.5.4        svglite_2.1.0       
## [28] tzdb_0.3.0           timechange_0.1.1     googledrive_2.0.0   
## [31] generics_0.1.3       farver_2.1.1         ellipsis_0.3.2      
## [34] cachem_1.0.6         withr_2.5.0          cli_3.4.1           
## [37] magrittr_2.0.3       crayon_1.5.2         readxl_1.4.1        
## [40] evaluate_0.18        fs_1.5.2             fansi_1.0.3         
## [43] xml2_1.3.3           beeswarm_0.4.0       textshaping_0.3.6   
## [46] tools_4.2.0          hms_1.1.2            gargle_1.2.1        
## [49] lifecycle_1.0.3      munsell_0.5.0        reprex_2.0.2        
## [52] compiler_4.2.0       jquerylib_0.1.4      systemfonts_1.0.4   
## [55] rlang_1.1.1          grid_4.2.0           rstudioapi_0.14     
## [58] labeling_0.4.2       rmarkdown_2.18       gtable_0.3.1        
## [61] DBI_1.1.3            R6_2.5.1             gridExtra_2.3       
## [64] lubridate_1.9.0      bit_4.0.5            fastmap_1.1.0       
## [67] utf8_1.2.2           ragg_1.2.5           stringi_1.7.8       
## [70] ggbeeswarm_0.7.1     parallel_4.2.0       vctrs_0.5.2         
## [73] dbplyr_2.2.1         tidyselect_1.2.0     xfun_0.35

```