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' |