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

Changeset 8:00a42b66e522 (2018-05-15)
Previous changeset 7:e6a4ff41af6b (2018-05-09) Next changeset 9:4255881bebb1 (2018-06-05)
Commit message:
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/limma_voom commit 48125e8638453668f889a67791421f14d3ebe623
modified:
limma_voom.R
limma_voom.xml
test-data/out_rscript.txt
b
diff -r e6a4ff41af6b -r 00a42b66e522 limma_voom.R
--- a/limma_voom.R Wed May 09 13:27:14 2018 -0400
+++ b/limma_voom.R Tue May 15 02:36:36 2018 -0400
[
b'@@ -23,7 +23,8 @@\n #       trend", "t", 1, "double"            -Float for prior.count if limma-trend is used instead of voom\n #       weightOpt", "w", 0, "logical"       -String specifying if voomWithQualityWeights should be used\n #       topgenes", "G", 1, "integer"        -Integer specifying no. of genes to highlight in volcano and heatmap\n-#       treatOpt", "T", 0, "logical"        -String specifying if TREAT function shuld be used\n+#       treatOpt", "T", 0, "logical"        -String specifying if TREAT function should be used\n+#       plots, "P", 1, "character"          -String specifying additional plots to be created\n #\n # OUT:\n #       Density Plots (if filtering)\n@@ -125,7 +126,7 @@\n }\n \n # Function to write code for html images\n-HtmlImage <- function(source, label=source, height=600, width=600) {\n+HtmlImage <- function(source, label=source, height=500, width=500) {\n     cata("<img src=\\"", source, "\\" alt=\\"", label, "\\" height=\\"", height)\n     cata("\\" width=\\"", width, "\\"/>\\n")\n }\n@@ -175,7 +176,8 @@\n     "trend", "t", 1, "double",\n     "weightOpt", "w", 0, "logical",\n     "topgenes", "G", 1, "integer",\n-    "treatOpt", "T", 0, "logical"),\n+    "treatOpt", "T", 0, "logical",\n+    "plots", "P", 1, "character"),\n     byrow=TRUE, ncol=4)\n opt <- getopt(spec)\n \n@@ -322,28 +324,36 @@\n contrastData <- sanitiseEquation(contrastData)\n contrastData <- gsub(" ", ".", contrastData, fixed=TRUE)\n \n-denOutPng <- makeOut("densityplots.png")\n-denOutPdf <- makeOut("DensityPlots.pdf")\n-boxOutPng <- makeOut("boxplots.png")\n-boxOutPdf <- makeOut("BoxPlots.pdf")\n-mdsOutPdf <- character() # Initialise character vector\n-mdsOutPng <- character()\n-for (i in 1:ncol(factors)) {\n-    mdsOutPdf[i] <- makeOut(paste0("mdsplot_", names(factors)[i], ".pdf"))\n-    mdsOutPng[i] <- makeOut(paste0("mdsplot_", names(factors)[i], ".png"))\n+plots <- character()\n+if (!is.null(opt$plots)) {\n+    plots <- unlist(strsplit(opt$plots, split=","))\n }\n \n-mdOutPdf <- character()\n+denOutPng <- makeOut("densityplots.png")\n+denOutPdf <- makeOut("densityplots.pdf")\n+cpmOutPdf <- makeOut("cpmplots.pdf")\n+boxOutPng <- makeOut("boxplots.png")\n+boxOutPdf <- makeOut("boxplots.pdf")\n+mdsscreeOutPng <- makeOut("mdsscree.png")\n+mdsscreeOutPdf <- makeOut("mdsscree.pdf")\n+mdsxOutPdf <- makeOut("mdsplot_extra.pdf")\n+mdsxOutPng <- makeOut("mdsplot_extra.png")\n+mdsamOutPdf <- makeOut("mdplots_samples.pdf")\n+mdOutPdf <- character() # Initialise character vector\n volOutPdf <- character()\n heatOutPdf <- character()\n+stripOutPdf <- character()\n mdvolOutPng <- character()\n topOut <- character()\n for (i in 1:length(contrastData)) {\n-    mdOutPdf[i] <- makeOut(paste0("mdplot_", contrastData[i], ".pdf"))\n-    volOutPdf[i] <- makeOut(paste0("volplot_", contrastData[i], ".pdf"))\n-    heatOutPdf[i] <- makeOut(paste0("heatmap_", contrastData[i], ".pdf"))\n-    mdvolOutPng[i] <- makeOut(paste0("mdvolplot_", contrastData[i], ".png"))\n-    topOut[i] <- makeOut(paste0(deMethod, "_", contrastData[i], ".tsv"))\n+    con <- contrastData[i]\n+    con <- gsub("\\\\(|\\\\)", "", con)\n+    mdOutPdf[i] <- makeOut(paste0("mdplot_", con, ".pdf"))\n+    volOutPdf[i] <- makeOut(paste0("volplot_", con, ".pdf"))\n+    heatOutPdf[i] <- makeOut(paste0("heatmap_", con, ".pdf"))\n+    stripOutPdf[i] <- makeOut(paste0("stripcharts_", con, ".pdf"))\n+    mdvolOutPng[i] <- makeOut(paste0("mdvolplot_", con, ".png"))\n+    topOut[i] <- makeOut(paste0(deMethod, "_", con, ".tsv"))\n }\n \n normOut <- makeOut(paste0(deMethod, "_normcounts.tsv"))\n@@ -378,9 +388,18 @@\n   data$genes <- data.frame(GeneID=row.names(counts))\n }\n \n+# Creating naming data\n+samplenames <- colnames(data$counts)\n+sampleanno <- data.frame("sampleID"=samplenames, factors)\n+\n+# Creating colours for the groups\n+cols <- as.numeric(factors[, 1])\n+col.group <- palette()[cols]\n+\n # If filter crieteria set, filter out genes that do not have a required cpm/counts in a required number of\n # samples. Default is no filtering\n preFilterCount <- nrow(data$counts)\n+nsamples <'..b's <- rownames(topexp)\n+        }\n+        heatmap.2(topexp, scale="row", Colv=FALSE, Rowv=FALSE, dendrogram="none",\n+            main=paste("Contrast:", unmake.names(con), "\\nTop", opt$topgenes, "genes by adj.P.Val"),\n+            trace="none", density.info="none", lhei=c(2,10), margin=c(8, 6), labRow=labels, cexRow=0.7, srtCol=45,\n+            col=mycol, ColSideColors=col.group)\n+        linkName <- paste0("Heatmap_", con, ".pdf")\n+        linkAddr <- paste0("heatmap_", con, ".pdf")\n+        linkData <- rbind(linkData, c(linkName, linkAddr))\n+        invisible(dev.off())\n+    }\n+\n+    if ("s" %in% plots) {\n+        # Plot Stripcharts of top genes\n+        pdf(stripOutPdf[i], title=paste("Contrast:", unmake.names(con)))\n+        par(mfrow = c(3,2), cex.main=0.8, cex.axis=0.8)\n+        cols <- unique(col.group)\n+\n+        for (j in 1:length(topgenes)) {\n+            lfc <- round(top[topgenes[j], "logFC"], 2)\n+            pval <- round(top[topgenes[j], "adj.P.Val"], 5)\n+            if (wantTrend) {\n+                stripchart(plotData[topgenes[j], ] ~ factors[, 1], vertical=TRUE, las=2, pch=16, cex=0.8, cex.lab=0.8, col=cols,\n+                    method="jitter", ylab="Normalised log2 expression", main=paste0(labels[j], "\\nlogFC=", lfc, ", adj.P.Val=", pval))\n+            } else {\n+                stripchart(plotData$E[topgenes[j], ] ~ factors[, 1], vertical=TRUE, las=2, pch=16, cex=0.8, cex.lab=0.8, col=cols, \n+                    method="jitter", ylab="Normalised log2 expression", main=paste0(labels[j], "\\nlogFC=", lfc, ", adj.P.Val=", pval))\n+            }\n+        }\n+        linkName <- paste0("Stripcharts_", con, ".pdf")\n+        linkAddr <- paste0("stripcharts_", con, ".pdf")\n+        linkData <- rbind(linkData, c(linkName, linkAddr))\n+        invisible(dev.off())\n+    }\n }\n sigDiff <- data.frame(Up=upCount, Flat=flatCount, Down=downCount)\n row.names(sigDiff) <- contrastData\n@@ -774,10 +907,10 @@\n if (wantRda) {\n     print("Saving RData")\n     if (wantWeight) {\n-      save(counts, data, y, status, plotData, labels, factors, wts, fit, top, contrasts, design,\n+      save(counts, data, y, status, plotData, labels, factors, wts, fit, top, contrastData, contrasts, design,\n            file=rdaOut, ascii=TRUE)\n     } else {\n-      save(counts, data, y, status, plotData, labels, factors, fit, top, contrasts, design,\n+      save(counts, data, y, status, plotData, labels, factors, fit, top, contrastData, contrasts, design,\n            file=rdaOut, ascii=TRUE)\n     }\n     linkData <- rbind(linkData, c((paste0(deMethod, "_analysis.RData")), (paste0(deMethod, "_analysis.RData"))))\n@@ -805,8 +938,8 @@\n cata("Links to PDF copies of plots are in \'Plots\' section below <br />\\n")\n \n for (i in 1:nrow(imageData)) {\n-    if (grepl("density|box|mdvol", imageData$Link[i])) {\n-        HtmlImage(imageData$Link[i], imageData$Label[i], width=1200)\n+    if (grepl("density|box|mds|mdvol", imageData$Link[i])) {\n+        HtmlImage(imageData$Link[i], imageData$Label[i], width=1000)\n     } else if (wantWeight) {\n         HtmlImage(imageData$Link[i], imageData$Label[i], width=1000)\n     } else {\n@@ -834,8 +967,33 @@\n cata("</table>")\n \n cata("<h4>Plots:</h4>\\n")\n+#PDFs\n for (i in 1:nrow(linkData)) {\n-    if (grepl(".pdf", linkData$Link[i])) {\n+    if (grepl("density|cpm|boxplot|mds|mdplots|voomplot|saplot", linkData$Link[i])) {\n+        HtmlLink(linkData$Link[i], linkData$Label[i])\n+  }\n+}\n+\n+for (i in 1:nrow(linkData)) {\n+    if (grepl("mdplot_", linkData$Link[i])) {\n+        HtmlLink(linkData$Link[i], linkData$Label[i])\n+  }\n+}\n+\n+for (i in 1:nrow(linkData)) {\n+    if (grepl("volplot", linkData$Link[i])) {\n+        HtmlLink(linkData$Link[i], linkData$Label[i])\n+  }\n+}\n+\n+for (i in 1:nrow(linkData)) {\n+    if (grepl("heatmap", linkData$Link[i])) {\n+        HtmlLink(linkData$Link[i], linkData$Label[i])\n+  }\n+}\n+\n+for (i in 1:nrow(linkData)) {\n+    if (grepl("stripcharts", linkData$Link[i])) {\n         HtmlLink(linkData$Link[i], linkData$Label[i])\n   }\n }\n'
b
diff -r e6a4ff41af6b -r 00a42b66e522 limma_voom.xml
--- a/limma_voom.xml Wed May 09 13:27:14 2018 -0400
+++ b/limma_voom.xml Tue May 15 02:36:36 2018 -0400
[
@@ -1,4 +1,4 @@
-<tool id="limma_voom" name="limma" version="3.34.9.3">
+<tool id="limma_voom" name="limma" version="3.34.9.4">
     <description>
         Perform differential expression with limma-voom or limma-trend
     </description>
@@ -72,6 +72,10 @@
     #end if
 #end if
 
+#if $out.plots:
+    -P $out.plots
+#end if
+
 #if $out.normCounts:
     -x
 #end if
@@ -202,9 +206,9 @@
 
         <!-- Contrasts -->
         <repeat name="rep_contrast" title="Contrast" min="1" default="1">
-            <param name="contrast" type="text" label="Contrast of Interest" help="Names of two groups to compare separated by a hyphen e.g. Mut-WT. If the order is Mut-WT the fold changes in the results will be up/down in Mut relative to WT. If you have more than one contrast enter each separately using the Insert Contrast button below. For more info, see Chapter 8 in the limma User's guide: https://www.bioconductor.org/packages/release/bioc/vignettes/limma/inst/doc/usersguide.pdf">
+            <param name="contrast" type="text" label="Contrast of Interest" help="Names of two groups to compare separated by a hyphen e.g. Mut-WT. If the order is Mut-WT the fold changes in the results will be up/down in Mut relative to WT. If you have more than one contrast enter each separately using the Insert Contrast button below. For differences between contrasts use e.g. (Mut1-WT)-(Mut2-WT). For more info, see Chapter 8 in the limma User's guide: https://www.bioconductor.org/packages/release/bioc/vignettes/limma/inst/doc/usersguide.pdf">
                 <validator type="empty_field" />
-                <validator type="regex" message="Please only use letters, numbers or underscores">^[\w-]+$</validator>
+                <validator type="regex" message="Please only use letters, numbers or underscores">^[\(\w\)-]+$</validator>
             </param>
         </repeat>
 
@@ -250,6 +254,15 @@
 
         <!-- Output Options -->
         <section name="out" expanded="false" title="Output Options">
+            <param name="plots" type="select" display="checkboxes" multiple="True" optional="True" label="Additional Plots" help="Select additional plots to output in the report and as PDFs">
+                <option value="d">Density Plots (if filtering)</option>
+                <option value="c">CpmsVsCounts Plots (if filtering on cpms)</option>
+                <option value="b">Box Plots (if normalising)</option>
+                <option value="x">MDS Extra (Dims 2vs3 and 3vs4)</option>
+                <option value="m">MD Plots for individual samples</option>
+                <option value="h">Heatmaps (top DE genes) </option>
+                <option value="s">Stripcharts (top DE genes)</option>
+            </param>
             <param name="normCounts" type="boolean" truevalue="1" falsevalue="0" checked="false"
                 label="Output Normalised Counts Table?"
                 help="Output a file containing the normalised counts, these are in log2 counts per million (logCPM). Default: No">
@@ -278,9 +291,9 @@
             <param name="treat" type="boolean" truevalue="1" falsevalue="0" checked="False"
                 label="Test significance relative to a fold-change threshold (TREAT)"
                 help="If you want to apply a cut-off on a fold change the TREAT function can be used, see Help section below. Default: No"/>
-            <param name="topgenes" type="integer" value="10" min="0"
-                label="Number of genes to highlight in Volcano plot and Heatmap"
-                help="The top DE genes will be highlighted in the Volcano plot for each contrast and output in a heatmap PDF. Default: 10."/>
+            <param name="topgenes" type="integer" value="10" min="0" max="100"
+                label="Number of genes to highlight in Volcano plot, Heatmap and Stripcharts"
+                help="The top DE genes will be highlighted in the Volcano plot for each contrast and can be output in heatmap and stripchart PDFs (max 100). Default: 10."/>
             <param name="normalisationOption" type="select" label="Normalisation Method" help="Default: TMM">
                 <option value="TMM" selected="true">TMM</option>
                 <option value="RLE">RLE</option>
b
diff -r e6a4ff41af6b -r 00a42b66e522 test-data/out_rscript.txt
--- a/test-data/out_rscript.txt Wed May 09 13:27:14 2018 -0400
+++ b/test-data/out_rscript.txt Tue May 15 02:36:36 2018 -0400
[
b'@@ -23,7 +23,8 @@\n #       trend", "t", 1, "double"            -Float for prior.count if limma-trend is used instead of voom\n #       weightOpt", "w", 0, "logical"       -String specifying if voomWithQualityWeights should be used\n #       topgenes", "G", 1, "integer"        -Integer specifying no. of genes to highlight in volcano and heatmap\n-#       treatOpt", "T", 0, "logical"        -String specifying if TREAT function shuld be used\n+#       treatOpt", "T", 0, "logical"        -String specifying if TREAT function should be used\n+#       plots, "P", 1, "character"          -String specifying additional plots to be created\n #\n # OUT:\n #       Density Plots (if filtering)\n@@ -125,7 +126,7 @@\n }\n \n # Function to write code for html images\n-HtmlImage <- function(source, label=source, height=600, width=600) {\n+HtmlImage <- function(source, label=source, height=500, width=500) {\n     cata("<img src=\\"", source, "\\" alt=\\"", label, "\\" height=\\"", height)\n     cata("\\" width=\\"", width, "\\"/>\\n")\n }\n@@ -175,7 +176,8 @@\n     "trend", "t", 1, "double",\n     "weightOpt", "w", 0, "logical",\n     "topgenes", "G", 1, "integer",\n-    "treatOpt", "T", 0, "logical"),\n+    "treatOpt", "T", 0, "logical",\n+    "plots", "P", 1, "character"),\n     byrow=TRUE, ncol=4)\n opt <- getopt(spec)\n \n@@ -322,28 +324,36 @@\n contrastData <- sanitiseEquation(contrastData)\n contrastData <- gsub(" ", ".", contrastData, fixed=TRUE)\n \n-denOutPng <- makeOut("densityplots.png")\n-denOutPdf <- makeOut("DensityPlots.pdf")\n-boxOutPng <- makeOut("boxplots.png")\n-boxOutPdf <- makeOut("BoxPlots.pdf")\n-mdsOutPdf <- character() # Initialise character vector\n-mdsOutPng <- character()\n-for (i in 1:ncol(factors)) {\n-    mdsOutPdf[i] <- makeOut(paste0("mdsplot_", names(factors)[i], ".pdf"))\n-    mdsOutPng[i] <- makeOut(paste0("mdsplot_", names(factors)[i], ".png"))\n+plots <- character()\n+if (!is.null(opt$plots)) {\n+    plots <- unlist(strsplit(opt$plots, split=","))\n }\n \n-mdOutPdf <- character()\n+denOutPng <- makeOut("densityplots.png")\n+denOutPdf <- makeOut("densityplots.pdf")\n+cpmOutPdf <- makeOut("cpmplots.pdf")\n+boxOutPng <- makeOut("boxplots.png")\n+boxOutPdf <- makeOut("boxplots.pdf")\n+mdsscreeOutPng <- makeOut("mdsscree.png")\n+mdsscreeOutPdf <- makeOut("mdsscree.pdf")\n+mdsxOutPdf <- makeOut("mdsplot_extra.pdf")\n+mdsxOutPng <- makeOut("mdsplot_extra.png")\n+mdsamOutPdf <- makeOut("mdplots_samples.pdf")\n+mdOutPdf <- character() # Initialise character vector\n volOutPdf <- character()\n heatOutPdf <- character()\n+stripOutPdf <- character()\n mdvolOutPng <- character()\n topOut <- character()\n for (i in 1:length(contrastData)) {\n-    mdOutPdf[i] <- makeOut(paste0("mdplot_", contrastData[i], ".pdf"))\n-    volOutPdf[i] <- makeOut(paste0("volplot_", contrastData[i], ".pdf"))\n-    heatOutPdf[i] <- makeOut(paste0("heatmap_", contrastData[i], ".pdf"))\n-    mdvolOutPng[i] <- makeOut(paste0("mdvolplot_", contrastData[i], ".png"))\n-    topOut[i] <- makeOut(paste0(deMethod, "_", contrastData[i], ".tsv"))\n+    con <- contrastData[i]\n+    con <- gsub("\\\\(|\\\\)", "", con)\n+    mdOutPdf[i] <- makeOut(paste0("mdplot_", con, ".pdf"))\n+    volOutPdf[i] <- makeOut(paste0("volplot_", con, ".pdf"))\n+    heatOutPdf[i] <- makeOut(paste0("heatmap_", con, ".pdf"))\n+    stripOutPdf[i] <- makeOut(paste0("stripcharts_", con, ".pdf"))\n+    mdvolOutPng[i] <- makeOut(paste0("mdvolplot_", con, ".png"))\n+    topOut[i] <- makeOut(paste0(deMethod, "_", con, ".tsv"))\n }\n \n normOut <- makeOut(paste0(deMethod, "_normcounts.tsv"))\n@@ -378,9 +388,18 @@\n   data$genes <- data.frame(GeneID=row.names(counts))\n }\n \n+# Creating naming data\n+samplenames <- colnames(data$counts)\n+sampleanno <- data.frame("sampleID"=samplenames, factors)\n+\n+# Creating colours for the groups\n+cols <- as.numeric(factors[, 1])\n+col.group <- palette()[cols]\n+\n # If filter crieteria set, filter out genes that do not have a required cpm/counts in a required number of\n # samples. Default is no filtering\n preFilterCount <- nrow(data$counts)\n+nsamples <'..b's <- rownames(topexp)\n+        }\n+        heatmap.2(topexp, scale="row", Colv=FALSE, Rowv=FALSE, dendrogram="none",\n+            main=paste("Contrast:", unmake.names(con), "\\nTop", opt$topgenes, "genes by adj.P.Val"),\n+            trace="none", density.info="none", lhei=c(2,10), margin=c(8, 6), labRow=labels, cexRow=0.7, srtCol=45,\n+            col=mycol, ColSideColors=col.group)\n+        linkName <- paste0("Heatmap_", con, ".pdf")\n+        linkAddr <- paste0("heatmap_", con, ".pdf")\n+        linkData <- rbind(linkData, c(linkName, linkAddr))\n+        invisible(dev.off())\n+    }\n+\n+    if ("s" %in% plots) {\n+        # Plot Stripcharts of top genes\n+        pdf(stripOutPdf[i], title=paste("Contrast:", unmake.names(con)))\n+        par(mfrow = c(3,2), cex.main=0.8, cex.axis=0.8)\n+        cols <- unique(col.group)\n+\n+        for (j in 1:length(topgenes)) {\n+            lfc <- round(top[topgenes[j], "logFC"], 2)\n+            pval <- round(top[topgenes[j], "adj.P.Val"], 5)\n+            if (wantTrend) {\n+                stripchart(plotData[topgenes[j], ] ~ factors[, 1], vertical=TRUE, las=2, pch=16, cex=0.8, cex.lab=0.8, col=cols,\n+                    method="jitter", ylab="Normalised log2 expression", main=paste0(labels[j], "\\nlogFC=", lfc, ", adj.P.Val=", pval))\n+            } else {\n+                stripchart(plotData$E[topgenes[j], ] ~ factors[, 1], vertical=TRUE, las=2, pch=16, cex=0.8, cex.lab=0.8, col=cols, \n+                    method="jitter", ylab="Normalised log2 expression", main=paste0(labels[j], "\\nlogFC=", lfc, ", adj.P.Val=", pval))\n+            }\n+        }\n+        linkName <- paste0("Stripcharts_", con, ".pdf")\n+        linkAddr <- paste0("stripcharts_", con, ".pdf")\n+        linkData <- rbind(linkData, c(linkName, linkAddr))\n+        invisible(dev.off())\n+    }\n }\n sigDiff <- data.frame(Up=upCount, Flat=flatCount, Down=downCount)\n row.names(sigDiff) <- contrastData\n@@ -774,10 +907,10 @@\n if (wantRda) {\n     print("Saving RData")\n     if (wantWeight) {\n-      save(counts, data, y, status, plotData, labels, factors, wts, fit, top, contrasts, design,\n+      save(counts, data, y, status, plotData, labels, factors, wts, fit, top, contrastData, contrasts, design,\n            file=rdaOut, ascii=TRUE)\n     } else {\n-      save(counts, data, y, status, plotData, labels, factors, fit, top, contrasts, design,\n+      save(counts, data, y, status, plotData, labels, factors, fit, top, contrastData, contrasts, design,\n            file=rdaOut, ascii=TRUE)\n     }\n     linkData <- rbind(linkData, c((paste0(deMethod, "_analysis.RData")), (paste0(deMethod, "_analysis.RData"))))\n@@ -805,8 +938,8 @@\n cata("Links to PDF copies of plots are in \'Plots\' section below <br />\\n")\n \n for (i in 1:nrow(imageData)) {\n-    if (grepl("density|box|mdvol", imageData$Link[i])) {\n-        HtmlImage(imageData$Link[i], imageData$Label[i], width=1200)\n+    if (grepl("density|box|mds|mdvol", imageData$Link[i])) {\n+        HtmlImage(imageData$Link[i], imageData$Label[i], width=1000)\n     } else if (wantWeight) {\n         HtmlImage(imageData$Link[i], imageData$Label[i], width=1000)\n     } else {\n@@ -834,8 +967,33 @@\n cata("</table>")\n \n cata("<h4>Plots:</h4>\\n")\n+#PDFs\n for (i in 1:nrow(linkData)) {\n-    if (grepl(".pdf", linkData$Link[i])) {\n+    if (grepl("density|cpm|boxplot|mds|mdplots|voomplot|saplot", linkData$Link[i])) {\n+        HtmlLink(linkData$Link[i], linkData$Label[i])\n+  }\n+}\n+\n+for (i in 1:nrow(linkData)) {\n+    if (grepl("mdplot_", linkData$Link[i])) {\n+        HtmlLink(linkData$Link[i], linkData$Label[i])\n+  }\n+}\n+\n+for (i in 1:nrow(linkData)) {\n+    if (grepl("volplot", linkData$Link[i])) {\n+        HtmlLink(linkData$Link[i], linkData$Label[i])\n+  }\n+}\n+\n+for (i in 1:nrow(linkData)) {\n+    if (grepl("heatmap", linkData$Link[i])) {\n+        HtmlLink(linkData$Link[i], linkData$Label[i])\n+  }\n+}\n+\n+for (i in 1:nrow(linkData)) {\n+    if (grepl("stripcharts", linkData$Link[i])) {\n         HtmlLink(linkData$Link[i], linkData$Label[i])\n   }\n }\n'