Last updated: 2022-02-13
Checks: 6 1
Knit directory: cTWAS_analysis/
This reproducible R Markdown analysis was created with workflowr (version 1.6.2). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.
Great! Since the R Markdown file has been committed to the Git repository, you know the exact version of the code that produced these results.
Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.
The command set.seed(20211220)
was run prior to running the code in the R Markdown file. Setting a seed ensures that any results that rely on randomness, e.g. subsampling or permutations, are reproducible.
Great job! Recording the operating system, R version, and package versions is critical for reproducibility.
Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.
Using absolute paths to the files within your workflowr project makes it difficult for you and others to run your code on a different machine. Change the absolute path(s) below to the suggested relative path(s) to make your code more reproducible.
absolute | relative |
---|---|
/project2/xinhe/shengqian/cTWAS/cTWAS_analysis/data/ | data |
/project2/xinhe/shengqian/cTWAS/cTWAS_analysis/code/ctwas_config.R | code/ctwas_config.R |
Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.
The results in this page were generated with repository version 87fee8b. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.
Note that you need to be careful to ensure that all relevant files for the analysis have been committed to Git prior to generating the results (you can use wflow_publish
or wflow_git_commit
). workflowr only checks the R Markdown file, but you know if there are other scripts or data files that it depends on. Below is the status of the Git repository when the results were generated:
Ignored files:
Ignored: .ipynb_checkpoints/
Untracked files:
Untracked: code/.ipynb_checkpoints/
Untracked: code/AF_out/
Untracked: code/BMI_out/
Untracked: code/T2D_out/
Untracked: code/ctwas_config.R
Untracked: code/mapping.R
Untracked: code/out/
Untracked: code/run_AF_analysis.sbatch
Untracked: code/run_AF_analysis.sh
Untracked: code/run_AF_ctwas_rss_LDR.R
Untracked: code/run_BMI_analysis.sbatch
Untracked: code/run_BMI_analysis.sh
Untracked: code/run_BMI_ctwas_rss_LDR.R
Untracked: code/run_T2D_analysis.sbatch
Untracked: code/run_T2D_analysis.sh
Untracked: code/run_T2D_ctwas_rss_LDR.R
Untracked: data/.ipynb_checkpoints/
Untracked: data/AF/
Untracked: data/BMI/
Untracked: data/T2D/
Untracked: data/UKBB/
Untracked: data/UKBB_SNPs_Info.text
Untracked: data/gene_OMIM.txt
Untracked: data/gene_pip_0.8.txt
Untracked: data/mashr_Heart_Atrial_Appendage.db
Untracked: data/summary_known_genes_annotations.xlsx
Untracked: data/untitled.txt
Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.
These are the previous versions of the repository in which changes were made to the R Markdown (analysis/BMI_Brain_Hypothalamus.Rmd
) and HTML (docs/BMI_Brain_Hypothalamus.html
) files. If you’ve configured a remote Git repository (see ?wflow_git_remote
), click on the hyperlinks in the table below to view the files as they were in that past version.
File | Version | Author | Date | Message |
---|---|---|---|---|
Rmd | 87fee8b | sq-96 | 2022-02-13 | update |
qclist_all <- list()
qc_files <- paste0(results_dir, "/", list.files(results_dir, pattern="exprqc.Rd"))
for (i in 1:length(qc_files)){
load(qc_files[i])
chr <- unlist(strsplit(rev(unlist(strsplit(qc_files[i], "_")))[1], "[.]"))[1]
qclist_all[[chr]] <- cbind(do.call(rbind, lapply(qclist,unlist)), as.numeric(substring(chr,4)))
}
qclist_all <- data.frame(do.call(rbind, qclist_all))
colnames(qclist_all)[ncol(qclist_all)] <- "chr"
rm(qclist, wgtlist, z_gene_chr)
#number of imputed weights
nrow(qclist_all)
[1] 11083
#number of imputed weights by chromosome
table(qclist_all$chr)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1107 757 667 439 549 622 531 429 416 429 660 610 213 357 369 492
17 18 19 20 21 22
680 168 851 327 134 276
#number of imputed weights without missing variants
sum(qclist_all$nmiss==0)
[1] 8872
#proportion of imputed weights without missing variants
mean(qclist_all$nmiss==0)
[1] 0.8005053
library(ggplot2)
library(cowplot)
********************************************************
Note: As of version 1.0.0, cowplot does not change the
default ggplot2 theme anymore. To recover the previous
behavior, execute:
theme_set(theme_cowplot())
********************************************************
load(paste0(results_dir, "/", analysis_id, "_ctwas.s2.susieIrssres.Rd"))
df <- data.frame(niter = rep(1:ncol(group_prior_rec), 2),
value = c(group_prior_rec[1,], group_prior_rec[2,]),
group = rep(c("Gene", "SNP"), each = ncol(group_prior_rec)))
df$group <- as.factor(df$group)
df$value[df$group=="SNP"] <- df$value[df$group=="SNP"]*thin #adjust parameter to account for thin argument
p_pi <- ggplot(df, aes(x=niter, y=value, group=group)) +
geom_line(aes(color=group)) +
geom_point(aes(color=group)) +
xlab("Iteration") + ylab(bquote(pi)) +
ggtitle("Prior mean") +
theme_cowplot()
df <- data.frame(niter = rep(1:ncol(group_prior_var_rec), 2),
value = c(group_prior_var_rec[1,], group_prior_var_rec[2,]),
group = rep(c("Gene", "SNP"), each = ncol(group_prior_var_rec)))
df$group <- as.factor(df$group)
p_sigma2 <- ggplot(df, aes(x=niter, y=value, group=group)) +
geom_line(aes(color=group)) +
geom_point(aes(color=group)) +
xlab("Iteration") + ylab(bquote(sigma^2)) +
ggtitle("Prior variance") +
theme_cowplot()
plot_grid(p_pi, p_sigma2)
#estimated group prior
estimated_group_prior <- group_prior_rec[,ncol(group_prior_rec)]
names(estimated_group_prior) <- c("gene", "snp")
estimated_group_prior["snp"] <- estimated_group_prior["snp"]*thin #adjust parameter to account for thin argument
print(estimated_group_prior)
gene snp
0.0049608595 0.0002982899
#estimated group prior variance
estimated_group_prior_var <- group_prior_var_rec[,ncol(group_prior_var_rec)]
names(estimated_group_prior_var) <- c("gene", "snp")
print(estimated_group_prior_var)
gene snp
15.52429 17.75596
#report sample size
print(sample_size)
[1] 336107
#report group size
group_size <- c(nrow(ctwas_gene_res), n_snps)
print(group_size)
[1] 11083 7535010
#estimated group PVE
estimated_group_pve <- estimated_group_prior_var*estimated_group_prior*group_size/sample_size #check PVE calculation
names(estimated_group_pve) <- c("gene", "snp")
print(estimated_group_pve)
gene snp
0.002539502 0.118737825
#compare sum(PIP*mu2/sample_size) with above PVE calculation
c(sum(ctwas_gene_res$PVE),sum(ctwas_snp_res$PVE))
[1] 0.01272065 15.93546282
#distribution of PIPs
hist(ctwas_gene_res$susie_pip, xlim=c(0,1), main="Distribution of Gene PIPs")
#genes with PIP>0.8 or 20 highest PIPs
head(ctwas_gene_res[order(-ctwas_gene_res$susie_pip),report_cols], max(sum(ctwas_gene_res$susie_pip>0.8), 20))
genename region_tag susie_pip mu2 PVE z
7493 PPM1M 3_36 0.9999998 244.75253 7.281981e-04 4.537140
3276 CCND2 12_4 0.9397782 28.25790 7.901103e-05 -5.119990
7598 ZNF12 7_9 0.7814221 26.90490 6.255175e-05 5.089286
7840 ALKBH3 11_27 0.7683120 28.49878 6.514579e-05 -5.127700
13153 RP11-1109F11.3 12_54 0.7651666 30.71378 6.992166e-05 6.456677
8379 CENPX 17_46 0.7105395 23.78657 5.028547e-05 4.110746
8812 RARG 12_33 0.7026347 25.49150 5.329022e-05 -4.106087
241 ISL1 5_30 0.7013735 26.15680 5.458288e-05 -5.009605
7356 SERPINI1 3_103 0.6982908 23.16012 4.811711e-05 -4.064505
4821 DCAF7 17_38 0.6563408 30.15661 5.888902e-05 5.436897
3176 PRRC2C 1_84 0.6252925 28.14482 5.236055e-05 -5.172951
584 NGFR 17_29 0.6249642 28.07281 5.219916e-05 -4.005394
11412 NCKIPSD 3_34 0.6000790 26.29681 4.694983e-05 4.490993
13194 CTC-498M16.4 5_52 0.5916685 52.94952 9.321009e-05 7.705884
5798 ECE2 3_113 0.5826731 28.51559 4.943445e-05 -5.287344
5712 THSD7B 2_81 0.5485336 27.38466 4.469233e-05 5.321314
11611 HRAT92 7_1 0.5483159 24.30683 3.965351e-05 -3.927490
7806 R3HCC1L 10_62 0.5455598 39.54709 6.419177e-05 7.438889
5498 CARM1 19_9 0.5430815 32.91258 5.318013e-05 5.016317
155 CSDE1 1_71 0.5346700 22.41865 3.566298e-05 -4.744544
num_eqtl
7493 2
3276 1
7598 2
7840 2
13153 1
8379 2
8812 1
241 1
7356 1
4821 1
3176 1
584 2
11412 1
13194 1
5798 1
5712 1
11611 2
7806 1
5498 1
155 1
#plot PIP vs effect size
plot(ctwas_gene_res$susie_pip, ctwas_gene_res$mu2, xlab="PIP", ylab="mu^2", main="Gene PIPs vs Effect Size")
#genes with 20 largest effect sizes
head(ctwas_gene_res[order(-ctwas_gene_res$mu2),report_cols],20)
genename region_tag susie_pip mu2 PVE z
7665 CCDC171 9_13 0.000000e+00 50550.12 0.000000e+00 8.034327
8735 NEGR1 1_46 0.000000e+00 43383.72 0.000000e+00 -10.695227
9420 STX19 3_59 0.000000e+00 31106.49 0.000000e+00 -5.059656
7889 LEO1 15_21 4.127809e-13 27969.54 3.435005e-14 4.602678
5271 MFAP1 15_16 0.000000e+00 23764.59 0.000000e+00 4.302998
13397 LINC02019 3_35 1.110223e-15 22551.06 7.449028e-17 -4.467972
5098 TMOD3 15_21 0.000000e+00 22268.83 0.000000e+00 5.411998
4029 TMOD2 15_21 0.000000e+00 21601.60 0.000000e+00 5.231719
1293 WDR76 15_16 0.000000e+00 21486.56 0.000000e+00 4.740358
11601 CKMT1A 15_16 0.000000e+00 21284.13 0.000000e+00 4.129652
2876 CISH 3_35 0.000000e+00 20260.39 0.000000e+00 -3.798838
3017 PLCL1 2_117 0.000000e+00 18664.08 0.000000e+00 -5.641781
1015 CCNT2 2_80 1.554312e-15 18644.85 8.622231e-17 3.685900
2875 HEMK1 3_35 0.000000e+00 17517.21 0.000000e+00 -3.881751
4998 TUBGCP4 15_16 0.000000e+00 16916.45 0.000000e+00 3.431538
9416 DHFR2 3_59 0.000000e+00 16605.15 0.000000e+00 2.760649
9414 NSUN3 3_59 0.000000e+00 15678.49 0.000000e+00 4.755360
8261 ADAL 15_16 0.000000e+00 14821.09 0.000000e+00 -2.861302
125 CACNA2D2 3_35 0.000000e+00 14198.82 0.000000e+00 -4.008712
5136 CNOT6L 4_52 0.000000e+00 14094.61 0.000000e+00 3.421551
num_eqtl
7665 2
8735 2
9420 1
7889 1
5271 1
13397 2
5098 1
4029 1
1293 2
11601 1
2876 1
3017 1
1015 1
2875 1
4998 1
9416 2
9414 1
8261 1
125 1
5136 1
#genes with 20 highest pve
head(ctwas_gene_res[order(-ctwas_gene_res$PVE),report_cols],20)
genename region_tag susie_pip mu2 PVE z
7493 PPM1M 3_36 0.99999983 244.75253 7.281981e-04 4.537140
2953 LANCL1 2_124 0.04150332 4670.09050 5.766743e-04 -3.714167
9392 FAM220A 7_8 0.21633910 445.76487 2.869216e-04 -1.293295
13194 CTC-498M16.4 5_52 0.59166851 52.94952 9.321009e-05 7.705884
4791 RAC1 7_8 0.15841126 178.70493 8.422577e-05 -5.512237
2896 SPCS1 3_36 0.08081493 348.59408 8.381738e-05 -5.066891
3276 CCND2 12_4 0.93977817 28.25790 7.901103e-05 -5.119990
13153 RP11-1109F11.3 12_54 0.76516663 30.71378 6.992166e-05 6.456677
12160 ATP5J2 7_62 0.45795733 50.81152 6.923244e-05 -7.116991
2926 ITGB6 2_96 0.49914478 45.97271 6.827301e-05 5.451232
7840 ALKBH3 11_27 0.76831199 28.49878 6.514579e-05 -5.127700
7806 R3HCC1L 10_62 0.54555981 39.54709 6.419177e-05 7.438889
7598 ZNF12 7_9 0.78142209 26.90490 6.255175e-05 5.089286
13639 DHRS11 17_22 0.34692049 60.57451 6.252336e-05 -8.142012
4821 DCAF7 17_38 0.65634080 30.15661 5.888902e-05 5.436897
241 ISL1 5_30 0.70137346 26.15680 5.458288e-05 -5.009605
8812 RARG 12_33 0.70263472 25.49150 5.329022e-05 -4.106087
5498 CARM1 19_9 0.54308147 32.91258 5.318013e-05 5.016317
3176 PRRC2C 1_84 0.62529253 28.14482 5.236055e-05 -5.172951
584 NGFR 17_29 0.62496421 28.07281 5.219916e-05 -4.005394
num_eqtl
7493 2
2953 2
9392 1
13194 1
4791 4
2896 1
3276 1
13153 1
12160 1
2926 1
7840 2
7806 1
7598 2
13639 1
4821 1
241 1
8812 1
5498 1
3176 1
584 2
#genes with 20 largest z scores
head(ctwas_gene_res[order(-abs(ctwas_gene_res$z)),report_cols],20)
genename region_tag susie_pip mu2 PVE z
7489 MST1R 3_35 1.814174e-03 1050.66826 5.671095e-06 -12.627554
38 RBM6 3_35 3.575409e-04 906.71176 9.645337e-07 12.536042
9046 KCTD13 16_24 4.543363e-02 109.27774 1.477174e-05 -11.490673
9045 ASPHD1 16_24 9.053323e-03 101.20568 2.726060e-06 -11.336675
7484 RNF123 3_35 4.940603e-12 823.15719 1.210000e-14 -10.959165
6178 TAOK2 16_24 1.619349e-02 92.70010 4.466252e-06 10.737701
8735 NEGR1 1_46 0.000000e+00 43383.71612 0.000000e+00 -10.695227
11930 NPIPB7 16_23 5.217439e-02 86.00817 1.335118e-05 10.452595
10430 CLN3 16_23 5.217439e-02 86.00817 1.335118e-05 10.452595
8365 INO80E 16_24 1.515007e-02 78.23179 3.526309e-06 10.102104
8032 ZNF646 16_24 5.107933e-02 75.83587 1.152504e-05 -10.000364
5486 SAE1 19_33 3.540535e-03 97.45885 1.026627e-06 9.848747
7487 CAMKV 3_35 3.330669e-16 1446.63894 1.433554e-18 9.847856
2753 COL4A3BP 5_44 1.986762e-02 68.98511 4.077779e-06 -9.828145
458 PRSS8 16_24 1.089810e-02 70.69376 2.292210e-06 -9.764760
1830 KAT8 16_24 9.420617e-03 68.77957 1.927797e-06 -9.705982
11411 LAT 16_23 1.060996e-01 82.99715 2.619989e-05 -9.552834
8031 ZNF668 16_24 1.101252e-02 70.05297 2.295281e-06 9.549888
2458 MTCH2 11_29 7.571534e-03 81.32046 1.831918e-06 -9.514152
10711 SULT1A2 16_23 4.339290e-02 80.36465 1.037543e-05 -9.448875
num_eqtl
7489 2
38 1
9046 1
9045 2
7484 1
6178 1
8735 2
11930 1
10430 1
8365 2
8032 1
5486 1
7487 1
2753 1
458 1
1830 1
11411 1
8031 2
2458 1
10711 2
#set nominal signifiance threshold for z scores
alpha <- 0.05
#bonferroni adjusted threshold for z scores
sig_thresh <- qnorm(1-(alpha/nrow(ctwas_gene_res)/2), lower=T)
#Q-Q plot for z scores
obs_z <- ctwas_gene_res$z[order(ctwas_gene_res$z)]
exp_z <- qnorm((1:nrow(ctwas_gene_res))/nrow(ctwas_gene_res))
plot(exp_z, obs_z, xlab="Expected z", ylab="Observed z", main="Gene z score Q-Q plot")
abline(a=0,b=1)
#plot z score vs PIP
plot(abs(ctwas_gene_res$z), ctwas_gene_res$susie_pip, xlab="abs(z)", ylab="PIP")
abline(v=sig_thresh, col="red", lty=2)
#proportion of significant z scores
mean(abs(ctwas_gene_res$z) > sig_thresh)
[1] 0.02012091
#genes with most significant z scores
head(ctwas_gene_res[order(-abs(ctwas_gene_res$z)),report_cols],20)
genename region_tag susie_pip mu2 PVE z
7489 MST1R 3_35 1.814174e-03 1050.66826 5.671095e-06 -12.627554
38 RBM6 3_35 3.575409e-04 906.71176 9.645337e-07 12.536042
9046 KCTD13 16_24 4.543363e-02 109.27774 1.477174e-05 -11.490673
9045 ASPHD1 16_24 9.053323e-03 101.20568 2.726060e-06 -11.336675
7484 RNF123 3_35 4.940603e-12 823.15719 1.210000e-14 -10.959165
6178 TAOK2 16_24 1.619349e-02 92.70010 4.466252e-06 10.737701
8735 NEGR1 1_46 0.000000e+00 43383.71612 0.000000e+00 -10.695227
11930 NPIPB7 16_23 5.217439e-02 86.00817 1.335118e-05 10.452595
10430 CLN3 16_23 5.217439e-02 86.00817 1.335118e-05 10.452595
8365 INO80E 16_24 1.515007e-02 78.23179 3.526309e-06 10.102104
8032 ZNF646 16_24 5.107933e-02 75.83587 1.152504e-05 -10.000364
5486 SAE1 19_33 3.540535e-03 97.45885 1.026627e-06 9.848747
7487 CAMKV 3_35 3.330669e-16 1446.63894 1.433554e-18 9.847856
2753 COL4A3BP 5_44 1.986762e-02 68.98511 4.077779e-06 -9.828145
458 PRSS8 16_24 1.089810e-02 70.69376 2.292210e-06 -9.764760
1830 KAT8 16_24 9.420617e-03 68.77957 1.927797e-06 -9.705982
11411 LAT 16_23 1.060996e-01 82.99715 2.619989e-05 -9.552834
8031 ZNF668 16_24 1.101252e-02 70.05297 2.295281e-06 9.549888
2458 MTCH2 11_29 7.571534e-03 81.32046 1.831918e-06 -9.514152
10711 SULT1A2 16_23 4.339290e-02 80.36465 1.037543e-05 -9.448875
num_eqtl
7489 2
38 1
9046 1
9045 2
7484 1
6178 1
8735 2
11930 1
10430 1
8365 2
8032 1
5486 1
7487 1
2753 1
458 1
1830 1
11411 1
8031 2
2458 1
10711 2
library("readxl")
known_annotations <- read_xlsx("data/summary_known_genes_annotations.xlsx", sheet="BMI")
known_annotations <- unique(known_annotations$`Gene Symbol`)
unrelated_genes <- ctwas_gene_res$genename[!(ctwas_gene_res$genename %in% known_annotations)]
#number of genes in known annotations
print(length(known_annotations))
[1] 41
#number of genes in known annotations with imputed expression
print(sum(known_annotations %in% ctwas_gene_res$genename))
[1] 22
#assign ctwas, TWAS, and bystander genes
ctwas_genes <- ctwas_gene_res$genename[ctwas_gene_res$susie_pip>0.8]
twas_genes <- ctwas_gene_res$genename[abs(ctwas_gene_res$z)>sig_thresh]
novel_genes <- ctwas_genes[!(ctwas_genes %in% twas_genes)]
#significance threshold for TWAS
print(sig_thresh)
[1] 4.586313
#number of ctwas genes
length(ctwas_genes)
[1] 2
#number of TWAS genes
length(twas_genes)
[1] 223
#show novel genes (ctwas genes with not in TWAS genes)
ctwas_gene_res[ctwas_gene_res$genename %in% novel_genes,report_cols]
genename region_tag susie_pip mu2 PVE z num_eqtl
7493 PPM1M 3_36 0.9999998 244.7525 0.0007281981 4.53714 2
#sensitivity / recall
sensitivity <- rep(NA,2)
names(sensitivity) <- c("ctwas", "TWAS")
sensitivity["ctwas"] <- sum(ctwas_genes %in% known_annotations)/length(known_annotations)
sensitivity["TWAS"] <- sum(twas_genes %in% known_annotations)/length(known_annotations)
sensitivity
ctwas TWAS
0.00000000 0.07317073
#specificity
specificity <- rep(NA,2)
names(specificity) <- c("ctwas", "TWAS")
specificity["ctwas"] <- sum(!(unrelated_genes %in% ctwas_genes))/length(unrelated_genes)
specificity["TWAS"] <- sum(!(unrelated_genes %in% twas_genes))/length(unrelated_genes)
specificity
ctwas TWAS
0.9998192 0.9801103
#precision / PPV
precision <- rep(NA,2)
names(precision) <- c("ctwas", "TWAS")
precision["ctwas"] <- sum(ctwas_genes %in% known_annotations)/length(ctwas_genes)
precision["TWAS"] <- sum(twas_genes %in% known_annotations)/length(twas_genes)
precision
ctwas TWAS
0.00000000 0.01345291
#ROC curves
pip_range <- (0:1000)/1000
sensitivity <- rep(NA, length(pip_range))
specificity <- rep(NA, length(pip_range))
for (index in 1:length(pip_range)){
pip <- pip_range[index]
ctwas_genes <- ctwas_gene_res$genename[ctwas_gene_res$susie_pip>=pip]
sensitivity[index] <- sum(ctwas_genes %in% known_annotations)/length(known_annotations)
specificity[index] <- sum(!(unrelated_genes %in% ctwas_genes))/length(unrelated_genes)
}
plot(1-specificity, sensitivity, type="l", xlim=c(0,1), ylim=c(0,1))
sig_thresh_range <- seq(from=0, to=max(abs(ctwas_gene_res$z)), length.out=length(pip_range))
for (index in 1:length(sig_thresh_range)){
sig_thresh_plot <- sig_thresh_range[index]
twas_genes <- ctwas_gene_res$genename[abs(ctwas_gene_res$z)>=sig_thresh_plot]
sensitivity[index] <- sum(twas_genes %in% known_annotations)/length(known_annotations)
specificity[index] <- sum(!(unrelated_genes %in% twas_genes))/length(unrelated_genes)
}
lines(1-specificity, sensitivity, xlim=c(0,1), ylim=c(0,1), col="red", lty=2)
sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Scientific Linux 7.4 (Nitrogen)
Matrix products: default
BLAS/LAPACK: /software/openblas-0.2.19-el7-x86_64/lib/libopenblas_haswellp-r0.2.19.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] readxl_1.3.1 cowplot_1.0.0 ggplot2_3.3.5 workflowr_1.6.2
loaded via a namespace (and not attached):
[1] tidyselect_1.1.1 xfun_0.29 purrr_0.3.4 colorspace_2.0-2
[5] vctrs_0.3.8 generics_0.1.1 htmltools_0.5.2 yaml_2.2.1
[9] utf8_1.2.2 blob_1.2.2 rlang_0.4.12 jquerylib_0.1.4
[13] later_0.8.0 pillar_1.6.4 glue_1.5.1 withr_2.4.3
[17] DBI_1.1.1 bit64_4.0.5 lifecycle_1.0.1 stringr_1.4.0
[21] cellranger_1.1.0 munsell_0.5.0 gtable_0.3.0 evaluate_0.14
[25] memoise_2.0.1 labeling_0.4.2 knitr_1.36 fastmap_1.1.0
[29] httpuv_1.5.1 fansi_0.5.0 highr_0.9 Rcpp_1.0.7
[33] promises_1.0.1 scales_1.1.1 cachem_1.0.6 farver_2.1.0
[37] fs_1.5.2 bit_4.0.4 digest_0.6.29 stringi_1.7.6
[41] dplyr_1.0.7 rprojroot_2.0.2 grid_3.6.1 tools_3.6.1
[45] magrittr_2.0.1 tibble_3.1.6 RSQLite_2.2.8 crayon_1.4.2
[49] whisker_0.3-2 pkgconfig_2.0.3 ellipsis_0.3.2 data.table_1.14.2
[53] assertthat_0.2.1 rmarkdown_2.11 R6_2.5.1 git2r_0.26.1
[57] compiler_3.6.1