Repository 'seurat'
hg clone https://toolshed.g2.bx.psu.edu/repos/iuc/seurat

Changeset 1:7319f83ae734 (2019-12-09)
Previous changeset 0:8d8412d35247 (2018-08-26) Next changeset 2:321bdd834266 (2019-12-19)
Commit message:
"planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/seurat commit 88cf23c767023f71b4ea1e72aac568cc694cc34a"
modified:
seurat.xml
added:
Seurat.R
test-data/counts.tab.gz
test-data/out.html
removed:
seurat.R
test-data/deng_small.tab.gz
test-data/out.pdf
b
diff -r 8d8412d35247 -r 7319f83ae734 Seurat.R
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Seurat.R Mon Dec 09 14:32:16 2019 -0500
b
@@ -0,0 +1,110 @@
+#' ---
+#' title: "Seurat Analysis"
+#' author: "Performed using Galaxy"
+#' params:
+#'     counts: ""
+#'     min_cells: ""
+#'     min_genes: ""
+#'     low_thresholds: ""
+#'     high_thresholds: ""
+#'     numPCs: ""
+#'     cells_use: ""
+#'     resolution: ""
+#'     min_pct: ""
+#'     logfc_threshold: ""
+#'     showcode: ""
+#'     warn: ""
+#'     varstate: ""
+#'     vlnfeat: ""
+#'     featplot: ""
+#'     PCplots: ""
+#'     tsne: ""
+#'     heatmaps: ""
+#' ---
+
+#+ echo=F, warning = F, message=F
+options( show.error.messages=F, error = function () { cat( geterrmessage(), file=stderr() ); q( "no", 1, F ) } )
+showcode <- as.logical(params$showcode)
+warn <-  as.logical(params$warn)
+varstate <- as.logical(params$varstate)
+vlnfeat <- as.logical(params$vlnfeat)
+featplot <- as.logical(params$featplot)
+PCplots <- as.logical(params$PCplots)
+tsne <- as.logical(params$tsne)
+heatmaps <- as.logical(params$heatmaps)
+
+# we need that to not crash galaxy with an UTF8 error on German LC settings.
+loc <- Sys.setlocale("LC_MESSAGES", "en_US.UTF-8")
+
+
+#+ echo = F, warning = `warn`, include =`varstate`
+min_cells <- as.integer(params$min_cells)
+min_genes <- as.integer(params$min_genes)
+low_thresholds <- as.integer(params$low_thresholds)
+high_thresholds <- as.integer(params$high_thresholds)
+numPCs <- as.integer(params$numPCs)
+cells_use <- as.integer(params$cells_use)
+resolution <- as.double(params$resolution)
+min_pct <- as.double(params$min_pct)
+logfc_threshold <- as.double(params$logfc_thresh)
+print(paste0("Minimum cells: ", min_cells))
+print(paste0("Minimum features: ", min_genes))
+print(paste0("Umi low threshold: ", low_thresholds))
+print(paste0("Umi high threshold: ", high_thresholds))
+print(paste0("Number of principal components: ", numPCs))
+print(paste0("Resolution: ", resolution))
+print(paste0("Minimum percent of cells", min_pct))
+print(paste0("Logfold change threshold", logfc_threshold))
+
+#+ echo = FALSE
+if(showcode == TRUE){print("Read in data, generate inital Seurat object")}
+#+ echo = `showcode`, warning = `warn`, message = F
+counts <- read.delim(params$counts, row.names=1)
+seuset <- Seurat::CreateSeuratObject(counts = counts, min.cells = min_cells, min.features = min_genes)
+
+#+ echo = FALSE
+if(showcode == TRUE && vlnfeat == TRUE){print("Raw data vizualization")}
+#+ echo = `showcode`, warning = `warn`, include=`vlnfeat` 
+Seurat::VlnPlot(object = seuset, features = c("nFeature_RNA", "nCount_RNA"), axis="v")
+Seurat::FeatureScatter(object = seuset, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")
+
+#+ echo = FALSE
+if(showcode == TRUE){print("Filter and normalize for UMI counts")}
+#+ echo = `showcode`, warning = `warn`
+seuset <- subset(seuset, subset = `nCount_RNA` > low_thresholds & `nCount_RNA` < high_thresholds)
+seuset <- Seurat::NormalizeData(seuset, normalizeation.method = "LogNormalize", scale.factor = 10000)
+
+#+ echo = FALSE
+if(showcode == TRUE && featplot == TRUE){print("Variable Genes")}
+#+ echo = `showcode`, warning = `warn`, include = `featplot`
+seuset <- Seurat::FindVariableFeatures(object = seuset, selection.method = "mvp")
+Seurat::VariableFeaturePlot(seuset, cols = c("black", "red"), selection.method = "disp")
+seuset <- Seurat::ScaleData(object = seuset, vars.to.regress = "nCount_RNA")
+
+#+ echo = FALSE
+if(showcode == TRUE && PCplots == TRUE){print("PCA Visualization")}
+#+ echo = `showcode`, warning = `warn`, include = `PCplots`
+seuset <- Seurat::RunPCA(seuset, npcs=numPCs)
+Seurat::VizDimLoadings(seuset, dims = 1:2)
+Seurat::DimPlot(seuset, dims = c(1,2), reduction="pca")
+Seurat::DimHeatmap(seuset, dims=1:numPCs, nfeatures=30, reduction="pca")
+seuset <- Seurat::JackStraw(seuset, dims=numPCs, reduction = "pca", num.replicate = 100)
+seuset <- Seurat::ScoreJackStraw(seuset, dims = 1:numPCs)
+Seurat::JackStrawPlot(seuset, dims = 1:numPCs)
+Seurat::ElbowPlot(seuset, ndims = numPCs, reduction = "pca")
+
+#+ echo = FALSE
+if(showcode == TRUE && tsne == TRUE){print("tSNE")}
+#+ echo = `showcode`, warning = `warn`, include = `tsne`
+seuset <- Seurat::FindNeighbors(object = seuset)
+seuset <- Seurat::FindClusters(object = seuset)
+seuset <- Seurat::RunTSNE(seuset, dims = 1:numPCs, resolution = resolution)
+Seurat::DimPlot(seuset, reduction="tsne")
+
+#+ echo = FALSE
+if(showcode == TRUE && heatmaps == TRUE){print("Marker Genes")}
+#+ echo = `showcode`, warning = `warn`, include = `heatmaps`
+markers <- Seurat::FindAllMarkers(seuset, only.pos = TRUE, min.pct = min_pct, logfc.threshold = logfc_threshold)
+top10 <- dplyr::group_by(markers, cluster)
+top10 <- dplyr::top_n(top10, 10, avg_logFC)
+Seurat::DoHeatmap(seuset, features = top10$gene)
b
diff -r 8d8412d35247 -r 7319f83ae734 seurat.R
--- a/seurat.R Sun Aug 26 16:24:02 2018 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,116 +0,0 @@
-options( show.error.messages=F, error = function () { cat( geterrmessage(), file=stderr() ); q( "no", 1, F ) } )
-
-# we need that to not crash galaxy with an UTF8 error on German LC settings.
-loc <- Sys.setlocale("LC_MESSAGES", "en_US.UTF-8")
-
-suppressPackageStartupMessages({
-    library(Seurat)
-    library(SingleCellExperiment)
-    library(dplyr)
-    library(optparse)
-})
-
-option_list <- list(
-    make_option(c("-counts","--counts"), type="character", help="Counts file"),
-    make_option(c("-numPCs","--numPCs"), type="integer", help="Number of PCs to use in plots"),
-    make_option(c("-min.cells","--min.cells"), type="integer", help="Minimum cells to include"),
-    make_option(c("-min.genes","--min.genes"), type="integer", help="Minimum genes to include"),
-    make_option(c("-low.thresholds","--low.thresholds"), type="double", help="Low threshold for filtering cells"),
-    make_option(c("-high.thresholds","--high.thresholds"), type="double", help="High threshold for filtering cells"),
-    make_option(c("-x.low.cutoff","--x.low.cutoff"), type="double", help="X-axis low cutoff for variable genes"),
-    make_option(c("-x.high.cutoff","--x.high.cutoff"), type="double", help="X-axis high cutoff for variable genes"),
-    make_option(c("-y.cutoff","--y.cutoff"), type="double", help="Y-axis cutoff for variable genes"),
-    make_option(c("-cells.use","--cells.use"), type="integer", help="Cells to use for PCHeatmap"),
-    make_option(c("-resolution","--resolution"), type="double", help="Resolution in FindClusters"),
-    make_option(c("-min.pct","--min.pct"), type="double", help="Minimum percent cells in FindClusters"),
-    make_option(c("-logfc.threshold","--logfc.threshold"), type="double", help="LogFC threshold in FindClusters"),
-    make_option(c("-rds","--rds"), type="logical", help="Output Seurat RDS object")
-  )
-
-parser <- OptionParser(usage = "%prog [options] file", option_list=option_list)
-args = parse_args(parser)
-
-counts <- read.delim(args$counts, row.names=1)
-seuset <- CreateSeuratObject(raw.data = counts, min.cells = args$min.cells, min.genes = args$min.cells)
-
-# Open PDF for plots
-pdf("out.pdf")
-
-VlnPlot(object = seuset, features.plot = c("nGene", "nUMI"), nCol = 2)
-GenePlot(object = seuset, gene1 = "nUMI", gene2 = "nGene")
-
-print("Filtering cells")
-if (!is.null(args$low.thresholds)){
-    lowthresh <- args$low.thresholds
-} else {
-    lowthresh <- "-Inf"
-}
-if (!is.null(args$high.thresholds)){
-    highthresh <- args$high.thresholds
-} else {
-    highthresh <- "Inf"
-}
-seuset <- FilterCells(object = seuset, subset.names = c("nUMI"), 
-    low.thresholds=c(lowthresh), high.thresholds = c(highthresh))
-
-print("Normalizing the data")
-seuset <- NormalizeData(object = seuset, normalization.method = "LogNormalize", 
-    scale.factor = 10000)
-
-print("Finding variable genes")
-seuset <- FindVariableGenes(object = seuset, mean.function = ExpMean, 
-    dispersion.function = LogVMR, 
-    x.low.cutoff = args$x.low.cutoff, 
-    x.high.cutoff = args$x.high.cutoff,,
-    y.cutoff = args$y.cutoff
-)
-
-print("Scaling the data and removing unwanted sources of variation")
-seuset <- ScaleData(object = seuset, vars.to.regress = c("nUMI"))
-
-print("Performing PCA analysis")
-seuset <- RunPCA(object = seuset, pc.genes = seuset@var.genes)
-VizPCA(object = seuset, pcs.use = 1:2)
-PCAPlot(object = seuset, dim.1 = 1, dim.2 = 2)
-PCHeatmap(
-    object = seuset, 
-    pc.use = 1:args$numPCs, 
-    cells.use = args$cell.use, 
-    do.balanced = TRUE, 
-    label.columns = FALSE,
-    use.full = FALSE
-)
-
-print("Determining statistically significant principal components")
-seuset <- JackStraw(object = seuset, num.replicate = 100, display.progress= FALSE)
-JackStrawPlot(object = seuset, PCs = 1:args$numPCs)
-PCElbowPlot(object = seuset)
-
-print("Clustering the cells")
-seuset <- FindClusters(
-    object = seuset, 
-    reduction.type = "pca", 
-    dims.use = 1:args$numPCs, 
-    resolution = args$resolution,
-    print.output = 0, 
-    save.SNN = TRUE
-)
-
-print("Running non-linear dimensional reduction (tSNE)")
-seuset <- RunTSNE(object = seuset, dims.use = 1:args$numPCs, do.fast = TRUE)
-TSNEPlot(object = seuset)
-
-print("Finding differentially expressed genes (cluster biomarkers)")
-markers <- FindAllMarkers(object = seuset, only.pos = TRUE, min.pct = args$min.pct,
-    logfc.threshold = args$logfc.threshold)
-top10 <- markers %>% group_by(cluster) %>% top_n(10, avg_logFC)
-DoHeatmap(object = seuset, genes.use = top10$gene, slim.col.label = TRUE, remove.key = TRUE)
-
-# Close PDF for plots
-dev.off()
-
-if (!is.null(args$rds) ) {
-  saveRDS(seuset, "Seurat.rds")
-}
-
-sessionInfo()
\ No newline at end of file
b
diff -r 8d8412d35247 -r 7319f83ae734 seurat.xml
--- a/seurat.xml Sun Aug 26 16:24:02 2018 -0400
+++ b/seurat.xml Mon Dec 09 14:32:16 2019 -0500
[
b'@@ -1,111 +1,111 @@\n <tool id="seurat" name="Seurat" version="2.3.4">\n     <description>- toolkit for exploration of single-cell RNA-seq data</description>\n     <requirements>\n-        <requirement type="package" version="3.4.1">r-base</requirement>\n-        <requirement type="package" version="2.3.4">r-seurat</requirement>\n-        <requirement type="package" version="1.0.0">bioconductor-singlecellexperiment</requirement> \n-        <requirement type="package" version="1.6.0">r-optparse</requirement>\n+        <requirement type="package" version="3.1.0">r-seurat</requirement>\n+        <requirement type="package" version="1.16">r-rmarkdown</requirement>\n     </requirements>\n-    <version_command><![CDATA[\n-echo $(R --version | grep version | grep -v GNU)", seurat version" $(R --vanilla --slave -e "library(seurat); cat(sessionInfo()\\$otherPkgs\\$seurat\\$Version)" 2> /dev/null | grep -v -i "WARNING: ")", SingleCellExperiment version" $(R --vanilla --slave -e "library(SingleCellExperiment); cat(sessionInfo()\\$otherPkgs\\$SingleCellExperiment\\$Version)" 2> /dev/null | grep -v -i "WARNING: ")", optparse version" $(R --vanilla --slave -e "library(optparse); cat(sessionInfo()\\$otherPkgs\\$optparse\\$Version)" 2> /dev/null | grep -v -i "WARNING: ")\n-    ]]></version_command>\n     <command detect_errors="exit_code"><![CDATA[\n-\n-#if $rscript:\n-    cp \'$__tool_directory__/seurat.R\' \'$out_rscript\' &&\n+#if "vln" in $meta.plots:\n+    #set $vln = \'T\'\n+#else\n+    #set $vln = \'F\'\n+#end if\n+#if "feat" in $meta.plots:\n+    #set $feat = \'T\'\n+#else\n+    #set $feat = \'F\'\n #end if\n-\n-Rscript \'$__tool_directory__/seurat.R\'\n-\n---counts \'$counts\'\n---numPCs $adv.num_PCs\n---min.cells $adv.min_cells\n---min.genes $adv.min_genes\n-\n-#if $adv.low_thresholds:\n-    --low.thresholds $adv.low_thresholds\n+#if "PCs" in $meta.plots:\n+    #set $PCs = \'T\'\n+#else\n+    #set $PCs = \'F\'\n #end if\n-#if $adv.high_thresholds:\n-    --high.thresholds $adv.high_thresholds\n-#end if\n-#if $adv.x_low_cutoff:\n-    --x.low.cutoff $adv.x_low_cutoff\n+#if "tsne" in $meta.plots:\n+    #set $tsne = \'T\'\n+#else\n+    #set $tsne = \'F\'\n #end if\n-#if $adv.x_high_cutoff:\n-    --x.high.cutoff $adv.x_high_cutoff\n-#end if\n-#if $adv.y_cutoff:\n-    --y.cutoff $adv.y_cutoff\n+#if "heat" in $meta.plots:\n+    #set $heatmaps = \'T\'\n+#else\n+    #set $heatmaps = \'F\'\n #end if\n-#if $adv.cells_use:\n-    --cells.use $adv.cells_use\n-#end if\n-#if $adv.resolution:\n-    --resolution $adv.resolution\n-#end if\n-#if $adv.min_pct:\n-    --min.pct $adv.min_pct\n-#end if\n-#if $adv.logfc_threshold:\n-    --logfc.threshold $adv.logfc_threshold\n-#end if\n-\n-#if $rds:\n-    --rds \'$rds\'\n-#end if\n-\n-]]></command>\n-\n+Rscript -e "library(\\"rmarkdown\\"); render(\\"$__tool_directory__/Seurat.R\\",\n+    params = list(counts = \\"${counts}\\",\n+        min_cells = \\"${adv.min_cells}\\",\n+        min_genes = \\"${adv.min_genes}\\",\n+        low_thresholds = \\"${adv.low_thresholds}\\",\n+        high_thresholds = \\"${adv.high_thresholds}\\",\n+        numPCs = \\"${adv.num_PCs}\\",\n+        cells_use = \\"${adv.cells_use}\\",\n+        resolution = \\"${adv.resolution}\\",\n+        min_pct = \\"${adv.min_pct}\\",\n+        logfc_threshold = \\"${adv.logfc_threshold}\\",\n+        warn = \\"${meta.warn}\\",\n+        varstate = \\"${meta.varstate}\\",\n+        showcode = \\"${meta.showcode}\\",\n+        vlnfeat = \\"$vln\\",\n+        featplot = \\"$feat\\",\n+        PCplots = \\"$PCs\\",\n+        tsne = \\"$tsne\\",\n+        heatmaps = \\"$heatmaps\\"),\n+    intermediates_dir = \\".\\",\n+    output_format = html_document(),\n+    output_dir = \\".\\",\n+    output_file = \\"out.html\\")"\n+    ]]></command>\n     <inputs>\n-        <param name="counts" type="data" format="tabular" label="Counts file" help="The should be a TAB-separated count matrix with gene identifers in the first column and a header row"/>\n-        <param name="rscript" type="boolean" truevalue="TRUE" falsevalue="FALSE" checked="False" label="Output Rscript?" help="If this option is set to Yes, the Rscript used by this tool will b'..b'age, at least X-fold difference (log-scale)between the two groups of cells. Default is 0.25 Increasing logfc.threshold speeds up the function, but can miss weaker signals." />\n         </section>\n+        <section name="meta" title="Output options" expanded="true">\n+            <param name="showcode" type="boolean" truevalue="T" falsevalue="F" checked="false" label="Show code alongside outputs?"/>\n+            <param name="warn" type="boolean" truevalue="T" falsevalue="F" checked="false" label="Include warnings in the output file (Yes) or pipe to stdout (No)"/>\n+            <param name="varstate" type="boolean" truevalue="T" falsevalue="F" checked="false" label="Display variable values used in code at the beginning of output file?"/>\n+            <param name="plots" type="select" optional="true" multiple="true" display="checkboxes" label="Which plots should be output?">\n+                <option value="vln" selected="true">Violin and Scatter plots</option>\n+                <option value="feat" selected="true">Feature counts plots</option>\n+                <option value="PCs" selected="true">PC plots</option>\n+                <option value="tsne" selected="true">tSNE plots</option>\n+                <option value="heat" selected="true">Heatmap plots</option>\n+            </param>\n+        </section>\n     </inputs>\n-\n     <outputs>\n-        <data name="out_pdf" format="pdf" from_work_dir="out.pdf" label="${tool.name} on ${on_string}: Plots" />\n-        <data name="out_rscript" format="txt" from_work_dir="out_rscript.txt" label="${tool.name} on ${on_string}: Rscript">\n-            <filter>rscript</filter>\n-        </data>\n-        <data name="out_rds" format="rds" from_work_dir="Seurat.rds" label="${tool.name} on ${on_string}: RData file">\n-            <filter>rds</filter>\n-        </data>\n+        <data name="out_html" format="html" from_work_dir="out.html" label="${tool.name} on ${on_string}" />\n     </outputs>\n \n     <tests>\n-        <!-- Ensure count matrix input works -->\n         <test>\n-            <param name="counts" ftype="tabular" value="deng_small.tab.gz"/>\n-            <param name="min_cells" value="3"/>\n-            <param name="min_genes" value="200"/>\n-            <param name="low_thresholds" value="1" />\n-            <param name="high_thresholds" value="20000000" />\n-            <param name="x_low_cutoff" value="0.0125" />\n-            <param name="x_high_cutoff" value="3" />\n-            <param name="y_cutoff" value="0.5" />\n-            <param name="numPCs" value="10" />\n-            <param name="cells_use" value="500"/>\n-            <param name="resolution" value="0.6" />\n-            <param name="min_pct" value="0.25" />\n-            <param name="logfc_threshold" value="0.25" />\n-            <output name="out_pdf" ftype="pdf" value="out.pdf" compare="sim_size"/>\n+            <param name="counts" ftype="tabular" value="counts.tab.gz"/>\n+            <section name="adv">\n+                <param name="numPCs" value="10" />\n+                <param name="min_cells" value="3"/>\n+                <param name="min_genes" value="200"/>\n+                <param name="low_thresholds" value="1" />\n+                <param name="high_thresholds" value="20000000" />\n+                <param name="cells_use" value="500"/>\n+                <param name="resolution" value="0.6" />\n+                <param name="min_pct" value="0.25" />\n+                <param name="logfc_threshold" value="0.25" />\n+            </section>\n+            <section name="meta">\n+                <param name="showcode" value="T"/>\n+                <param name="warn" value="F"/>\n+                <param name="varstate" value="F"/>\n+                <param name="plots" value="feat"/>\n+            </section>\n+            <output name="out_html" ftype="html" value="out.html" compare="sim_size"/>\n         </test>\n     </tests>\n     <help><![CDATA[\n@@ -128,7 +128,7 @@\n \n **Outputs**\n \n-    * PDF of plots\n+    * HTML of plots\n \n Optionally you can choose to output\n \n'
b
diff -r 8d8412d35247 -r 7319f83ae734 test-data/counts.tab.gz
b
Binary file test-data/counts.tab.gz has changed
b
diff -r 8d8412d35247 -r 7319f83ae734 test-data/deng_small.tab.gz
b
Binary file test-data/deng_small.tab.gz has changed
b
diff -r 8d8412d35247 -r 7319f83ae734 test-data/out.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out.html Mon Dec 09 14:32:16 2019 -0500
[
b'@@ -0,0 +1,433 @@\n+<!DOCTYPE html>\n+\n+<html xmlns="http://www.w3.org/1999/xhtml">\n+\n+<head>\n+\n+<meta charset="utf-8" />\n+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\n+<meta name="generator" content="pandoc" />\n+<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />\n+\n+\n+<meta name="author" content="Performed using Galaxy" />\n+\n+<meta name="date" content="2019-12-08" />\n+\n+<title>Seurat Analysis</title>\n+\n+<script>/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */\n+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,o=/^-ms-/,p=/-([\\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];'..b'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" width="672" /></p>\n+<pre class="r"><code>seuset &lt;- Seurat::ScaleData(object = seuset, vars.to.regress = &quot;nCount_RNA&quot;)</code></pre>\n+<pre><code>## Regressing out nCount_RNA</code></pre>\n+<pre><code>## Centering and scaling data matrix</code></pre>\n+\n+\n+\n+\n+</div>\n+\n+<script>\n+\n+// add bootstrap table styles to pandoc tables\n+function bootstrapStylePandocTables() {\n+  $(\'tr.header\').parent(\'thead\').parent(\'table\').addClass(\'table table-condensed\');\n+}\n+$(document).ready(function () {\n+  bootstrapStylePandocTables();\n+});\n+\n+\n+</script>\n+\n+<!-- tabsets -->\n+\n+<script>\n+$(document).ready(function () {\n+  window.buildTabsets("TOC");\n+});\n+\n+$(document).ready(function () {\n+  $(\'.tabset-dropdown > .nav-tabs > li\').click(function () {\n+    $(this).parent().toggleClass(\'nav-tabs-open\')\n+  });\n+});\n+</script>\n+\n+<!-- code folding -->\n+\n+\n+<!-- dynamically load mathjax for compatibility with self-contained -->\n+<script>\n+  (function () {\n+    var script = document.createElement("script");\n+    script.type = "text/javascript";\n+    script.src  = "https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML";\n+    document.getElementsByTagName("head")[0].appendChild(script);\n+  })();\n+</script>\n+\n+</body>\n+</html>\n'
b
diff -r 8d8412d35247 -r 7319f83ae734 test-data/out.pdf
b
Binary file test-data/out.pdf has changed