Agent skill

bio-reporting-rmarkdown-reports

Create reproducible bioinformatics analysis reports with R Markdown including code, results, and visualizations in HTML, PDF, or Word format. Use when generating analysis reports with RMarkdown.

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/rmarkdown-reports

SKILL.md

R Markdown Reports

Basic Document Structure

yaml
---
title: "RNA-seq Analysis Report"
author: "Your Name"
date: "`r Sys.Date()`"
output:
  html_document:
    toc: true
    toc_float: true
    code_folding: hide
    theme: cosmo
---

Setup Chunk

r
```{r setup, include=FALSE}
knitr::opts_chunk$set(
    echo = TRUE,
    message = FALSE,
    warning = FALSE,
    fig.width = 10,
    fig.height = 6,
    fig.align = 'center'
)
library(tidyverse)
library(DESeq2)
library(pheatmap)
```

Code Chunk Options

r
```{r analysis, echo=TRUE, results='hide'}
# echo: show code
# results: 'hide', 'asis', 'markup'
# include: FALSE hides chunk entirely
# eval: FALSE shows code but doesn't run
# cache: TRUE caches results
```

Parameterized Reports

yaml
---
title: "Sample Report"
params:
  sample_id: "sample1"
  count_file: "counts.csv"
  fdr_threshold: 0.05
---
r
```{r}
counts <- read.csv(params$count_file)
sample <- params$sample_id
fdr <- params$fdr_threshold
```
r
# Render with parameters
rmarkdown::render('report.Rmd', params = list(sample_id = 'sample2', fdr_threshold = 0.01))

# Batch render
samples <- c('sample1', 'sample2', 'sample3')
for (s in samples) {
    rmarkdown::render('report.Rmd', params = list(sample_id = s),
                       output_file = paste0(s, '_report.html'))
}

Tables

r
```{r}
# Basic kable table
knitr::kable(head(results), caption = 'Top DE genes')

# Interactive table with DT
library(DT)
datatable(results, filter = 'top', options = list(pageLength = 10))

# Formatted table with kableExtra
library(kableExtra)
results %>%
    head(10) %>%
    kable() %>%
    kable_styling(bootstrap_options = c('striped', 'hover')) %>%
    row_spec(which(results$padj < 0.01), bold = TRUE, color = 'red')
```

Figures

r
```{r volcano-plot, fig.cap="Volcano plot of differential expression"}
ggplot(results, aes(log2FoldChange, -log10(pvalue))) +
    geom_point(aes(color = padj < 0.05)) +
    theme_minimal()
```

Inline Code

markdown
We identified `r sum(res$padj < 0.05, na.rm=TRUE)` significantly
DE genes (FDR < 0.05) out of `r nrow(res)` tested.

Child Documents

yaml
---
title: "Main Report"
---
r
```{r child='methods.Rmd'}
```

```{r child='results.Rmd'}
```

PDF Output

yaml
---
output:
  pdf_document:
    toc: true
    number_sections: true
    fig_caption: true
    latex_engine: xelatex
---

HTML with Tabs

r
## Results {.tabset}

### PCA Plot
```{r}
plotPCA(vsd, intgroup = 'condition')
```

### Heatmap
```{r}
pheatmap(assay(vsd)[top_genes, ])
```

Caching Long Computations

r
```{r deseq-analysis, cache=TRUE, cache.extra=tools::md5sum('counts.csv')}
# Cached unless counts.csv changes
dds <- DESeqDataSetFromMatrix(counts, metadata, ~ condition)
dds <- DESeq(dds)
```

```{r downstream, dependson='deseq-analysis'}
# Re-runs when deseq-analysis cache changes
res <- results(dds)
```

Custom CSS

yaml
---
output:
  html_document:
    css: custom.css
---
css
/* custom.css */
body { font-family: 'Helvetica', sans-serif; }
h1 { color: #2c3e50; }
.figure { margin: 20px auto; }

Complete Report Template

markdown
---
title: "RNA-seq Analysis Report"
author: "Bioinformatics Core"
date: "`r Sys.Date()`"
output:
  html_document:
    toc: true
    toc_float: true
    code_folding: hide
params:
  count_file: "counts.csv"
  metadata_file: "metadata.csv"
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE)
library(DESeq2)
library(tidyverse)
library(pheatmap)
library(DT)
```

## Data Overview

```{r load-data}
counts <- read.csv(params$count_file, row.names = 1)
metadata <- read.csv(params$metadata_file, row.names = 1)
```

Loaded `r nrow(counts)` genes across `r ncol(counts)` samples.

## Differential Expression

```{r de-analysis, cache=TRUE}
dds <- DESeqDataSetFromMatrix(counts, metadata, ~ condition)
dds <- DESeq(dds)
res <- results(dds) %>% as.data.frame() %>% arrange(padj)
```

## Results

```{r results-table}
datatable(res %>% filter(padj < 0.05), options = list(pageLength = 10))
```

Related Skills

  • reporting/quarto-reports - Modern alternative
  • data-visualization/ggplot2-fundamentals - Figure creation
  • differential-expression/de-visualization - Analysis plots

Didn't find tool you were looking for?

Be as detailed as possible for better results