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 <- Seurat::ScaleData(object = seuset, vars.to.regress = "nCount_RNA")</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 |