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())
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
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
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
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
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
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)
## 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
```