Last updated: 2019-04-03
workflowr checks: (Click a bullet for more information) ✔ R Markdown file: up-to-date
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.
✔ Environment: empty
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.
✔ Seed:
set.seed(20190110)
The command set.seed(20190110)
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.
✔ Session information: recorded
Great job! Recording the operating system, R version, and package versions is critical for reproducibility.
✔ Repository version: 5870e6e
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: .DS_Store
Ignored: .Rhistory
Ignored: .Rproj.user/
Ignored: ._.DS_Store
Ignored: analysis/cache/
Ignored: build-logs/
Ignored: data/alevin/
Ignored: data/cellranger/
Ignored: data/processed/
Ignored: data/published/
Ignored: output/.DS_Store
Ignored: output/._.DS_Store
Ignored: output/03-clustering/selected_genes.csv.zip
Ignored: output/04-marker-genes/de_genes.csv.zip
Ignored: packrat/.DS_Store
Ignored: packrat/._.DS_Store
Ignored: packrat/lib-R/
Ignored: packrat/lib-ext/
Ignored: packrat/lib/
Ignored: packrat/src/
Untracked files:
Untracked: DGEList.Rds
Untracked: output/90-methods/package-versions.json
Untracked: scripts/build.pbs
Unstaged changes:
Modified: analysis/_site.yml
Modified: output/01-preprocessing/droplet-selection.pdf
Modified: output/01-preprocessing/parameters.json
Modified: output/01-preprocessing/selection-comparison.pdf
Modified: output/01B-alevin/alevin-comparison.pdf
Modified: output/01B-alevin/parameters.json
Modified: output/02-quality-control/qc-thresholds.pdf
Modified: output/02-quality-control/qc-validation.pdf
Modified: output/03-clustering/cluster-comparison.pdf
Modified: output/03-clustering/cluster-validation.pdf
Modified: output/04-marker-genes/de-results.pdf
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.
File | Version | Author | Date | Message |
---|---|---|---|---|
Rmd | 5870e6e | Luke Zappia | 2019-04-03 | Adjust figures and fix names |
html | 33ac14f | Luke Zappia | 2019-03-20 | Tidy up website |
html | ae75188 | Luke Zappia | 2019-03-06 | Revise figures after proofread |
html | 2693e97 | Luke Zappia | 2019-03-05 | Add methods page |
html | eac2550 | Luke Zappia | 2019-02-22 | Add alevin comparison figure to output |
Rmd | 88dd94a | Luke Zappia | 2019-02-22 | Add Alevin comparison figure |
html | 88dd94a | Luke Zappia | 2019-02-22 | Add Alevin comparison figure |
html | 8f826ef | Luke Zappia | 2019-02-08 | Rebuild site and tidy |
Rmd | a8d104d | Luke Zappia | 2019-02-08 | Add Alevin comparison |
# scRNA-seq
library("SingleCellExperiment")
# Plotting
library("UpSetR")
library("cowplot")
library("grid")
# Tidyverse
library("tidyverse")
source(here::here("R/load.R"))
source(here::here("R/annotate.R"))
source(here::here("R/output.R"))
sel_path <- here::here("data/processed/01-selected.Rds")
alevin_paths <- c(
here::here("data/alevin/Org1"),
here::here("data/alevin/Org2"),
here::here("data/alevin/Org3")
)
bpparam <- BiocParallel::MulticoreParam(workers = 10)
The standard way to quanitfy 10x Chromium scRNA-seq data is using the Cell Ranger platform that performs traditional alignment to a reference genome and counts the reads overlapping annotated genes. An alternative appraoch is to estimate expression levels directly against the transcriptome. We have done that using an approach designed for scRNA-seq data called alevin available in the Salmon package. In this document we are going to compare the results of this approach to what we get from Cell Ranger and our previous processing.
if (file.exists(sel_path)) {
selected <- read_rds(sel_path)
} else {
stop("Selected dataset is missing. ",
"Please run '01-preprocessing.Rmd' first.",
call. = FALSE)
}
colData(selected)$BarcodeSample <- paste(
colData(selected)$Barcode,
colData(selected)$Sample,
sep = "-"
)
alevin <- readAlevin(alevin_paths, dataset = "Orgs123Alevin")
alevin <- annotateSCE(alevin, calc_qc = TRUE, BPPARAM = bpparam)
colData(alevin)$BarcodeSample <- paste(
colData(alevin)$Barcode,
colData(alevin)$Sample,
sep = "-"
)
cell_data <- full_join(as.data.frame(colData(selected)),
as.data.frame(colData(alevin)),
by = "BarcodeSample",
suffix = c(".Trad", ".Alevin")) %>%
mutate(Sample = Sample.Trad) %>%
mutate(Sample = if_else(is.na(Sample), Sample.Alevin, Sample)) %>%
select(BarcodeSample, Sample, contains("_"), contains("Filt"),
-contains("control"), -contains("endogenous"), -contains("_MT")) %>%
mutate_at(vars(contains("Filt")), replace_na, replace = FALSE) %>%
mutate(AlevinFilt = !is.na(total_counts.Alevin)) %>%
mutate(SelBy = "Both") %>%
mutate(SelBy = if_else(!is.na(total_counts.Trad) &
is.na(total_counts.Alevin),
"Trad only", SelBy),
SelBy = if_else(is.na(total_counts.Trad) &
!is.na(total_counts.Alevin),
"alevin only", SelBy)) %>%
mutate(SelBy = factor(SelBy,
levels = c("Both", "Trad only", "alevin only")))
feat_data <- full_join(as.data.frame(rowData(selected)),
as.data.frame(rowData(alevin)),
by = "ID",
suffix = c(".Trad", ".Alevin")) %>%
mutate(Annot = "Both") %>%
mutate(Annot = if_else(!is.na(total_counts.Trad) &
is.na(total_counts.Alevin),
"Trad only", Annot),
Annot = if_else(is.na(total_counts.Trad) &
!is.na(total_counts.Alevin),
"alevin only", Annot)) %>%
mutate(Annot = factor(Annot,
levels = c("Both", "Trad only", "alevin only")))
Alevin has it’s own method of selecting cell-containing droplets. Let’s see how that compares to what we have done previously.
ggplot(cell_data, aes(x = SelBy, fill = Sample)) +
geom_bar() +
theme_minimal() +
theme(axis.title.x = element_blank())
plot_data <- cell_data %>%
mutate(Traditional = total_counts.Trad,
alevin = total_counts.Alevin) %>%
mutate(Traditional = replace_na(Traditional,
0.9 * min(Traditional, na.rm = TRUE)),
alevin = replace_na(alevin, 0.9 * min(alevin, na.rm = TRUE)))
ggplot(plot_data, aes(x = Traditional, y = alevin, colour = SelBy)) +
geom_point(alpha = 0.3) +
geom_abline(intercept = 0, slope = 1, colour = "red") +
geom_smooth(data = filter(plot_data, SelBy == "Both"),
method = "lm", colour = "blue") +
ggtitle("total_counts") +
theme_minimal()
plot_data <- cell_data %>%
mutate(Traditional = log10_total_counts.Trad,
alevin = log10_total_counts.Alevin) %>%
mutate(Traditional = replace_na(Traditional,
0.9 * min(Traditional, na.rm = TRUE)),
alevin = replace_na(alevin, 0.9 * min(alevin, na.rm = TRUE)))
ggplot(plot_data, aes(x = Traditional, y = alevin, colour = SelBy)) +
geom_point(alpha = 0.3) +
geom_abline(intercept = 0, slope = 1, colour = "red") +
geom_smooth(data = filter(plot_data, SelBy == "Both"),
method = "lm", colour = "blue") +
ggtitle("log10(total_counts)") +
theme_minimal()
plot_data <- cell_data %>%
mutate(Traditional = total_features_by_counts.Trad,
alevin = total_features_by_counts.Alevin) %>%
mutate(Traditional = replace_na(Traditional,
0.9 * min(Traditional, na.rm = TRUE)),
alevin = replace_na(alevin, 0.9 * min(alevin, na.rm = TRUE)))
ggplot(plot_data, aes(x = Traditional, y = alevin, colour = SelBy)) +
geom_point(alpha = 0.3) +
geom_abline(intercept = 0, slope = 1, colour = "red") +
geom_smooth(data = filter(plot_data, SelBy == "Both"),
method = "lm", colour = "blue") +
ggtitle("total_features_by_counts") +
theme_minimal()
plot_data <- cell_data %>%
mutate(Traditional = log10_total_features_by_counts.Trad,
alevin = log10_total_features_by_counts.Alevin) %>%
mutate(Traditional = replace_na(Traditional,
0.9 * min(Traditional, na.rm = TRUE)),
alevin = replace_na(alevin, 0.9 * min(alevin, na.rm = TRUE)))
ggplot(plot_data, aes(x = Traditional, y = alevin, colour = SelBy)) +
geom_point(alpha = 0.3) +
geom_abline(intercept = 0, slope = 1, colour = "red") +
geom_smooth(data = filter(plot_data, SelBy == "Both"),
method = "lm", colour = "blue") +
ggtitle("log10(total_features_by_counts)") +
theme_minimal()
Percent counts in top 100 most expressed features.
plot_data <- cell_data %>%
mutate(Traditional = pct_counts_in_top_100_features.Trad,
alevin = pct_counts_in_top_100_features.Alevin) %>%
mutate(Traditional = replace_na(Traditional,
0.9 * min(Traditional, na.rm = TRUE)),
alevin = replace_na(alevin, 0.9 * min(alevin, na.rm = TRUE)))
ggplot(plot_data, aes(x = Traditional, y = alevin, colour = SelBy)) +
geom_point(alpha = 0.3) +
geom_abline(intercept = 0, slope = 1, colour = "red") +
geom_smooth(data = filter(plot_data, SelBy == "Both"),
method = "lm", colour = "blue") +
ggtitle("pct_counts_in_top_100_features") +
theme_minimal()
plot_data <- feat_data %>%
mutate(Traditional = total_counts.Trad,
alevin = total_counts.Alevin) %>%
mutate(Traditional = replace_na(Traditional, -1e5),
alevin = replace_na(alevin, -1e5))
ggplot(plot_data, aes(x = Traditional, y = alevin, colour = Annot)) +
geom_point(alpha = 0.3) +
geom_abline(intercept = 0, slope = 1, colour = "red") +
geom_smooth(data = filter(plot_data, Annot == "Both"),
method = "lm", colour = "blue") +
ggtitle("total_counts") +
theme_minimal()
plot_data <- feat_data %>%
mutate(Traditional = log10_total_counts.Trad,
alevin = log10_total_counts.Alevin) %>%
mutate(Traditional = replace_na(Traditional, -1),
alevin = replace_na(alevin, -1))
ggplot(plot_data, aes(x = Traditional, y = alevin, colour = Annot)) +
geom_point(alpha = 0.3) +
geom_abline(intercept = 0, slope = 1, colour = "red") +
geom_smooth(data = filter(plot_data, Annot == "Both"),
method = "lm", colour = "blue") +
ggtitle("log10(total_counts)") +
theme_minimal()
plot_data <- feat_data %>%
mutate(Traditional = n_cells_by_counts.Trad,
alevin = n_cells_by_counts.Alevin) %>%
mutate(Traditional = replace_na(Traditional, -500),
alevin = replace_na(alevin, -500))
ggplot(plot_data, aes(x = Traditional, y = alevin, colour = Annot)) +
geom_point(alpha = 0.3) +
geom_abline(intercept = 0, slope = 1, colour = "red") +
geom_smooth(data = filter(plot_data, Annot == "Both"),
method = "lm", colour = "blue") +
ggtitle("n_cells_by_counts") +
theme_minimal()
plot_data <- feat_data %>%
mutate(Traditional = mean_counts.Trad,
alevin = mean_counts.Alevin) %>%
mutate(Traditional = replace_na(Traditional, -5),
alevin = replace_na(alevin, -5))
ggplot(plot_data, aes(x = Traditional, y = alevin, colour = Annot)) +
geom_point(alpha = 0.3) +
geom_abline(intercept = 0, slope = 1, colour = "red") +
geom_smooth(data = filter(plot_data, Annot == "Both"),
method = "lm", colour = "blue") +
ggtitle("mean_counts") +
theme_minimal()
plot_data <- feat_data %>%
mutate(Traditional = log10_mean_counts.Trad,
alevin = log10_mean_counts.Alevin) %>%
mutate(Traditional = replace_na(Traditional, -0.1),
alevin = replace_na(alevin, -0.1))
ggplot(plot_data, aes(x = Traditional, y = alevin, colour = Annot)) +
geom_point(alpha = 0.3) +
geom_abline(intercept = 0, slope = 1, colour = "red") +
geom_smooth(data = filter(plot_data, Annot == "Both"),
method = "lm", colour = "blue") +
ggtitle("log10(mean_counts)") +
theme_minimal()
counts_data <- feat_data %>%
filter(Annot == "Both") %>%
select(ID, starts_with("log10_total_counts")) %>%
gather(key = "Method", value = "log10_total_counts", -ID) %>%
mutate(Method = str_split(Method, "\\.", simplify = TRUE)[, 2])
zeros_data <- feat_data %>%
filter(Annot == "Both") %>%
select(ID, starts_with("n_cells_by_counts")) %>%
gather(key = "Method", value = "n_cells_by_counts", -ID) %>%
mutate(Method = str_split(Method, "\\.", simplify = TRUE)[, 2])
plot_data <- left_join(counts_data, zeros_data, by = c("ID", "Method"))
ggplot(plot_data,
aes(x = log10_total_counts, y = n_cells_by_counts, colour = Method)) +
geom_point() +
geom_smooth(aes(group = Method), colour = "blue") +
facet_wrap(~ Method) +
theme_minimal()
plot_data <- cell_data %>%
select(BarcodeSample,
`Cell Ranger v3` = CellRangerFilt,
EmptyDrops = EmpDropsFilt,
alevin = AlevinFilt) %>%
mutate(`Cell Ranger v3` = if_else(`Cell Ranger v3`, 1L, 0L),
EmptyDrops = if_else(EmptyDrops, 1L, 0L),
alevin = if_else(alevin, 1L, 0L))
upset(plot_data, order.by = "freq",
sets.x.label = "Number of cells",
text.scale = c(1.5, 1.2, 1.5, 1, 1.5, 1.5),
matrix.color = "#7A52C7",
main.bar.color = "#7A52C7",
sets.bar.color = "#7A52C7")
grid.edit("arrange", name = "arrange2")
comp_plot <- grid.grab()
plot_data <- cell_data %>%
mutate(Traditional = total_counts.Trad,
alevin = total_counts.Alevin) %>%
mutate(Traditional = replace_na(Traditional,
0.9 * min(Traditional, na.rm = TRUE)),
alevin = replace_na(alevin, 0.9 * min(alevin, na.rm = TRUE)))
counts_plot <- ggplot(plot_data,
aes(x = Traditional, y = alevin, colour = SelBy)) +
geom_point(alpha = 0.3) +
geom_abline(intercept = 0, slope = 1, colour = "#7A52C7") +
geom_smooth(data = filter(plot_data, SelBy == "Both"),
method = "lm", colour = "#00B7C6") +
scale_x_log10(labels = scales::number) +
scale_y_log10(labels = scales::number) +
scale_colour_manual(values = c("#EC008C", "#00ADEF", "#8DC63F"),
labels = c("Both", "Alignment-based only",
"alevin only")) +
ggtitle("Total counts per cell") +
xlab("Alignment-based") +
theme_minimal() +
theme(legend.position = "bottom",
legend.title = element_blank())
plot_data <- feat_data %>%
mutate(Traditional = log10_mean_counts.Trad,
alevin = log10_mean_counts.Alevin) %>%
mutate(Traditional = replace_na(Traditional, -0.1),
alevin = replace_na(alevin, -0.1))
mean_plot <- ggplot(plot_data,
aes(x = Traditional, y = alevin, colour = Annot)) +
geom_point(alpha = 0.3) +
geom_abline(intercept = 0, slope = 1, colour = "#7A52C7") +
geom_smooth(data = filter(plot_data, Annot == "Both"),
method = "lm", colour = "#00B7C6") +
scale_colour_manual(values = c("#EC008C", "#00ADEF", "#8DC63F"),
labels = c("Both", "Alignment-based only",
"alevin only")) +
ggtitle(expression("Mean counts per gene ("*log["10"]*")")) +
xlab("Alignment-based") +
theme_minimal() +
theme(legend.position = "bottom",
legend.title = element_blank())
counts_data <- feat_data %>%
filter(Annot == "Both") %>%
select(ID, starts_with("log10_total_counts")) %>%
gather(key = "Method", value = "log10_total_counts", -ID) %>%
mutate(Method = str_split(Method, "\\.", simplify = TRUE)[, 2])
zeros_data <- feat_data %>%
filter(Annot == "Both") %>%
select(ID, starts_with("n_cells_by_counts")) %>%
gather(key = "Method", value = "n_cells_by_counts", -ID) %>%
mutate(Method = str_split(Method, "\\.", simplify = TRUE)[, 2]) %>%
mutate(PropZero = if_else(Method == "Trad",
1 - n_cells_by_counts / ncol(selected),
1 - n_cells_by_counts / ncol(alevin)))
plot_data <- left_join(counts_data, zeros_data, by = c("ID", "Method")) %>%
mutate(Method = factor(Method, levels = c("Trad", "Alevin"),
labels = c("Alignment-based", "alevin")))
zeros_plot <- ggplot(plot_data,
aes(x = log10_total_counts, y = PropZero, colour = Method)) +
geom_point(alpha = 0.3) +
geom_smooth(aes(group = Method), colour = "#EC008C") +
scale_y_continuous(labels = scales::percent) +
scale_colour_manual(values = c("#00ADEF", "#8DC63F")) +
facet_wrap(~ Method) +
ggtitle("Zeros relationship") +
xlab(expression("Total counts per gene ("*log["10"]*")")) +
ylab("Percentage zeros") +
theme_minimal() +
theme(legend.position = "none")
fig <- plot_grid(comp_plot, counts_plot, mean_plot, zeros_plot,
nrow = 2, labels = "AUTO")
ggsave(here::here("output", DOCNAME, "alevin-comparison.pdf"), fig,
width = 7, height = 6, scale = 1.5)
ggsave(here::here("output", DOCNAME, "alevin-comparison.png"), fig,
width = 7, height = 6, scale = 1.5)
fig
Overall the two approaches seem to produce similar results. There are differences between them but it is difficult to tell if one approach is inaccurate. For the rest of this analysis we will stick with the traditional approach as it is more familiar.
This table describes parameters used and set in this document.
params <- list(
list(
Parameter = "n_cells",
Value = ncol(alevin),
Description = "Number of cells in alevin dataset"
),
list(
Parameter = "n_genes",
Value = nrow(alevin),
Description = "Number of genes in alevin dataset"
)
)
params <- jsonlite::toJSON(params, pretty = TRUE)
knitr::kable(jsonlite::fromJSON(params))
Parameter | Value | Description |
---|---|---|
n_cells | 10423 | Number of cells in alevin dataset |
n_genes | 37247 | Number of genes in alevin dataset |
This table describes the output files produced by this document. Right click and Save Link As… to download the results.
write_rds(alevin, here::here("data/processed/01B-alevin.Rds"))
dir.create(here::here("output", DOCNAME), showWarnings = FALSE)
readr::write_lines(params, here::here("output", DOCNAME, "parameters.json"))
knitr::kable(data.frame(
File = c(
getDownloadLink("parameters.json", DOCNAME),
getDownloadLink("alevin-comparison.png", DOCNAME),
getDownloadLink("alevin-comparison.pdf", DOCNAME)
),
Description = c(
"Parameters set and used in this analysis",
"Alevin comparison figure (PNG)",
"Alevin comparison figure (PDF)"
)
))
File | Description |
---|---|
parameters.json | Parameters set and used in this analysis |
alevin-comparison.png | Alevin comparison figure (PNG) |
alevin-comparison.pdf | Alevin comparison figure (PDF) |
devtools::session_info()
─ Session info ──────────────────────────────────────────────────────────
setting value
version R version 3.5.0 (2018-04-23)
os CentOS release 6.7 (Final)
system x86_64, linux-gnu
ui X11
language (EN)
collate en_US.UTF-8
ctype en_US.UTF-8
tz Australia/Melbourne
date 2019-04-03
─ Packages ──────────────────────────────────────────────────────────────
! package * version date lib source
assertthat 0.2.0 2017-04-11 [1] CRAN (R 3.5.0)
backports 1.1.3 2018-12-14 [1] CRAN (R 3.5.0)
bindr 0.1.1 2018-03-13 [1] CRAN (R 3.5.0)
bindrcpp 0.2.2 2018-03-29 [1] CRAN (R 3.5.0)
Biobase * 2.42.0 2018-10-30 [1] Bioconductor
BiocGenerics * 0.28.0 2018-10-30 [1] Bioconductor
BiocParallel * 1.16.5 2019-01-04 [1] Bioconductor
bitops 1.0-6 2013-08-17 [1] CRAN (R 3.5.0)
broom 0.5.1 2018-12-05 [1] CRAN (R 3.5.0)
callr 3.1.1 2018-12-21 [1] CRAN (R 3.5.0)
cellranger 1.1.0 2016-07-27 [1] CRAN (R 3.5.0)
cli 1.0.1 2018-09-25 [1] CRAN (R 3.5.0)
colorspace 1.4-0 2019-01-13 [1] CRAN (R 3.5.0)
cowplot * 0.9.4 2019-01-08 [1] CRAN (R 3.5.0)
crayon 1.3.4 2017-09-16 [1] CRAN (R 3.5.0)
DelayedArray * 0.8.0 2018-10-30 [1] Bioconductor
desc 1.2.0 2018-05-01 [1] CRAN (R 3.5.0)
devtools 2.0.1 2018-10-26 [1] CRAN (R 3.5.0)
digest 0.6.18 2018-10-10 [1] CRAN (R 3.5.0)
dplyr * 0.7.8 2018-11-10 [1] CRAN (R 3.5.0)
evaluate 0.12 2018-10-09 [1] CRAN (R 3.5.0)
forcats * 0.3.0 2018-02-19 [1] CRAN (R 3.5.0)
fs 1.2.6 2018-08-23 [1] CRAN (R 3.5.0)
generics 0.0.2 2018-11-29 [1] CRAN (R 3.5.0)
GenomeInfoDb * 1.18.1 2018-11-12 [1] Bioconductor
GenomeInfoDbData 1.2.0 2019-01-15 [1] Bioconductor
GenomicRanges * 1.34.0 2018-10-30 [1] Bioconductor
ggplot2 * 3.1.0 2018-10-25 [1] CRAN (R 3.5.0)
git2r 0.24.0 2019-01-07 [1] CRAN (R 3.5.0)
glue 1.3.0 2018-07-17 [1] CRAN (R 3.5.0)
gridExtra 2.3 2017-09-09 [1] CRAN (R 3.5.0)
gtable 0.2.0 2016-02-26 [1] CRAN (R 3.5.0)
haven 2.0.0 2018-11-22 [1] CRAN (R 3.5.0)
here 0.1 2017-05-28 [1] CRAN (R 3.5.0)
hms 0.4.2 2018-03-10 [1] CRAN (R 3.5.0)
htmltools 0.3.6 2017-04-28 [1] CRAN (R 3.5.0)
httr 1.4.0 2018-12-11 [1] CRAN (R 3.5.0)
IRanges * 2.16.0 2018-10-30 [1] Bioconductor
jsonlite 1.6 2018-12-07 [1] CRAN (R 3.5.0)
knitr 1.21 2018-12-10 [1] CRAN (R 3.5.0)
P lattice 0.20-35 2017-03-25 [5] CRAN (R 3.5.0)
lazyeval 0.2.1 2017-10-29 [1] CRAN (R 3.5.0)
lubridate 1.7.4 2018-04-11 [1] CRAN (R 3.5.0)
magrittr 1.5 2014-11-22 [1] CRAN (R 3.5.0)
P Matrix 1.2-14 2018-04-09 [5] CRAN (R 3.5.0)
matrixStats * 0.54.0 2018-07-23 [1] CRAN (R 3.5.0)
memoise 1.1.0 2017-04-21 [1] CRAN (R 3.5.0)
modelr 0.1.3 2019-02-05 [1] CRAN (R 3.5.0)
munsell 0.5.0 2018-06-12 [1] CRAN (R 3.5.0)
P nlme 3.1-137 2018-04-07 [5] CRAN (R 3.5.0)
pillar 1.3.1 2018-12-15 [1] CRAN (R 3.5.0)
pkgbuild 1.0.2 2018-10-16 [1] CRAN (R 3.5.0)
pkgconfig 2.0.2 2018-08-16 [1] CRAN (R 3.5.0)
pkgload 1.0.2 2018-10-29 [1] CRAN (R 3.5.0)
plyr 1.8.4 2016-06-08 [1] CRAN (R 3.5.0)
prettyunits 1.0.2 2015-07-13 [1] CRAN (R 3.5.0)
processx 3.2.1 2018-12-05 [1] CRAN (R 3.5.0)
ps 1.3.0 2018-12-21 [1] CRAN (R 3.5.0)
purrr * 0.3.0 2019-01-27 [1] CRAN (R 3.5.0)
R.methodsS3 1.7.1 2016-02-16 [1] CRAN (R 3.5.0)
R.oo 1.22.0 2018-04-22 [1] CRAN (R 3.5.0)
R.utils 2.7.0 2018-08-27 [1] CRAN (R 3.5.0)
R6 2.3.0 2018-10-04 [1] CRAN (R 3.5.0)
Rcpp 1.0.0 2018-11-07 [1] CRAN (R 3.5.0)
RCurl 1.95-4.11 2018-07-15 [1] CRAN (R 3.5.0)
readr * 1.3.1 2018-12-21 [1] CRAN (R 3.5.0)
readxl 1.2.0 2018-12-19 [1] CRAN (R 3.5.0)
remotes 2.0.2 2018-10-30 [1] CRAN (R 3.5.0)
rlang 0.3.1 2019-01-08 [1] CRAN (R 3.5.0)
rmarkdown 1.11 2018-12-08 [1] CRAN (R 3.5.0)
rprojroot 1.3-2 2018-01-03 [1] CRAN (R 3.5.0)
rstudioapi 0.9.0 2019-01-09 [1] CRAN (R 3.5.0)
rvest 0.3.2 2016-06-17 [1] CRAN (R 3.5.0)
S4Vectors * 0.20.1 2018-11-09 [1] Bioconductor
scales 1.0.0 2018-08-09 [1] CRAN (R 3.5.0)
sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 3.5.0)
SingleCellExperiment * 1.4.1 2019-01-04 [1] Bioconductor
stringi 1.2.4 2018-07-20 [1] CRAN (R 3.5.0)
stringr * 1.3.1 2018-05-10 [1] CRAN (R 3.5.0)
SummarizedExperiment * 1.12.0 2018-10-30 [1] Bioconductor
testthat 2.0.1 2018-10-13 [4] CRAN (R 3.5.0)
tibble * 2.0.1 2019-01-12 [1] CRAN (R 3.5.0)
tidyr * 0.8.2 2018-10-28 [1] CRAN (R 3.5.0)
tidyselect 0.2.5 2018-10-11 [1] CRAN (R 3.5.0)
tidyverse * 1.2.1 2017-11-14 [1] CRAN (R 3.5.0)
UpSetR * 1.3.3 2017-03-21 [1] CRAN (R 3.5.0)
usethis 1.4.0 2018-08-14 [1] CRAN (R 3.5.0)
whisker 0.3-2 2013-04-28 [1] CRAN (R 3.5.0)
withr 2.1.2 2018-03-15 [1] CRAN (R 3.5.0)
workflowr 1.1.1 2018-07-06 [1] CRAN (R 3.5.0)
xfun 0.4 2018-10-23 [1] CRAN (R 3.5.0)
xml2 1.2.0 2018-01-24 [1] CRAN (R 3.5.0)
XVector 0.22.0 2018-10-30 [1] Bioconductor
yaml 2.2.0 2018-07-25 [1] CRAN (R 3.5.0)
zlibbioc 1.28.0 2018-10-30 [1] Bioconductor
[1] /group/bioi1/luke/analysis/phd-thesis-analysis/packrat/lib/x86_64-pc-linux-gnu/3.5.0
[2] /group/bioi1/luke/analysis/phd-thesis-analysis/packrat/lib-ext/x86_64-pc-linux-gnu/3.5.0
[3] /group/bioi1/luke/analysis/phd-thesis-analysis/packrat/lib-R/x86_64-pc-linux-gnu/3.5.0
[4] /home/luke.zappia/R/x86_64-pc-linux-gnu-library/3.5
[5] /usr/local/installed/R/3.5.0/lib64/R/library
P ── Loaded and on-disk path mismatch.
This reproducible R Markdown analysis was created with workflowr 1.1.1