Use when building a sample-level hierarchical clustering dendrogram from a bulk expression matrix and sample annotation table, especially for QC, batch inspection, or sample similarity assessment. Trigger keywords: hierarchical clustering, dendrogram, sample QC, batch inspection, sample similarity. NOT for: differential expression testing, gene clustering heatmaps, single-cell clustering workflows.
67
80%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Use this skill when you need a sample-level hierarchical clustering dendrogram from a bulk expression matrix and a sample annotation table.
| Situation | File to Read | Purpose |
|---|---|---|
| Need algorithm details | references/algorithm.md | Distance calculation, linkage rules, and clustering assumptions |
| Need to run analysis or inspect CLI entrypoint behavior | scripts/main.R | Execute the workflow and inspect argument parsing, defaults, required flags, and sourced modules |
| Need workflow implementation details | scripts/run_analysis.R | See orchestration order, temp workspace handling, and output generation |
| Need logging or warning behavior | scripts/logging_utils.R | See standardized console log formatting and memory usage messages |
| Need file or parameter validation details | scripts/validation_utils.R | See path checks, output-directory checks, and scalar validation |
| Need timeout, temp workspace, or session info behavior | scripts/runtime_utils.R | See timeout control, temp cleanup, output copying, and session-info export |
| Need expression/group input handling | scripts/input_functions.R | See CSV loading, sample matching, and label extraction |
| Need clustering logic | scripts/clustering_functions.R | See distance calculation and hclust() generation |
| Need output-writing logic | scripts/output_utils.R | See CSV export and PDF rendering |
| Encounter errors, warnings, or unexpected clustering patterns | references/troubleshooting.md | Common failures, warning follow-up, and interpretation guidance |
| Need CLI examples or common parameter combinations | references/cli-guide.md | Detailed command patterns for standard, variant, and test runs |
| Need example input files or schema-concrete fixtures | tests/data/ | Inspect sample CSV layouts for expression and group inputs |
| Need expected output names or artifact formats | ## Output Files and references/cli-guide.md | Confirm the files the workflow writes and inspect documented example previews |
| Need to run regression tests | tests/run_tests.R | Execute the automated test suite |
| Need exact test assertions or edge cases | tests/testthat/test-clustering.R | Inspect validation, reproducibility, and output checks |
Rscript scripts/main.R \
--input_file ./expression_matrix.csv \
--group_file ./sample_groups.csv \
--output_dir ./output/ \
--distance_method euclidean \
--linkage_method complete \
--label_column batch \
--timeout_seconds 300 \
--seed 42| Short | Long | Type | Default | Description |
|---|---|---|---|---|
-i | --input_file | character | required | Expression matrix file (features as rows, samples as columns) |
-g | --group_file | character | required | Sample annotation file (first column sample ID, one metadata column for labels) |
-o | --output_dir | character | ./output/ | Output directory |
-d | --distance_method | character | euclidean | Distance metric for dist(): euclidean, maximum, manhattan, canberra, binary, minkowski |
-m | --linkage_method | character | complete | Linkage method for hclust(): complete, single, average, mcquitty, median, centroid, ward.D, ward.D2 |
-l | --label_column | character | second column | Column used as dendrogram labels |
-c | --label_cex | numeric | 0.8 | Dendrogram label size, must be > 0 |
-t | --timeout_seconds | integer | 300 | Elapsed time limit in seconds, must be > 0 |
-s | --seed | integer | 42 | Random seed for reproducibility |
input_file)Features as rows, samples as columns, CSV format with feature IDs in the first column.
,Sample01,Sample02,Sample03
TSPAN6,1.847876677,1.831755661,3.827625975
TNMD,0.034919984,0.053250385,1.388850793Requirements:
group_file)CSV with sample IDs in the first column. The second column is used by default for leaf labels unless --label_column is provided.
sample,batch
Sample01,batch1
Sample02,batch2
Sample03,batch1Requirements:
| File | Description |
|---|---|
hierarchical_clustering_plot.pdf | Sample dendrogram plot |
sample_distance_matrix.csv | Pairwise sample distance matrix |
clustering_order.csv | Leaf order shown in the dendrogram |
matched_samples.csv | Sample-to-label table used for plotting |
session_info.txt | R session and package version info |
WHEN checking file or parameter validation, READ: scripts/validation_utils.R
WHEN checking expression/group CSV handling, READ: scripts/input_functions.R
WHEN checking sample matching logic, READ: scripts/input_functions.R
WHEN interpreting distance or linkage behavior, READ: references/algorithm.md
WHEN checking clustering implementation, READ: scripts/clustering_functions.R
dist()hclust()WHEN checking output staging and cleanup behavior, READ: scripts/run_analysis.R
WHEN checking PDF/CSV export behavior, READ: scripts/output_utils.R
WHEN checking timeout, session info, or final file copy behavior, READ: scripts/runtime_utils.R
Sample distances are computed from the transposed expression matrix using base R dist().
The clustering tree is built with base R hclust(). The default linkage method is complete, matching the source analysis script.
Rscript scripts/main.R \
-i tests/data/sample_expression_matrix.csv \
-g tests/data/sample_groups.csv \
-o ./output/ \
-t 300Rscript scripts/main.R \
-i tests/data/sample_expression_matrix.csv \
-g tests/data/sample_groups.csv \
-o ./output_sample_labels/ \
-l sampleRscript scripts/main.R \
-i tests/data/sample_expression_matrix.csv \
-g tests/data/sample_groups.csv \
-o ./output_average/ \
-m average| Error | Cause | Solution | Read More |
|---|---|---|---|
SKILL_DEPENDENCY_MISSING | Required R package is not installed | Install the missing package and rerun | references/troubleshooting.md#skill_dependency_missing |
SKILL_FILE_NOT_FOUND | Input file does not exist or output directory could not be created | Check the path and permissions | references/troubleshooting.md#skill_file_not_found |
SKILL_EMPTY_FILE | Input file is empty | Re-export the CSV and confirm it contains data | references/troubleshooting.md#skill_empty_file |
SKILL_EMPTY_DATA | CSV parsed successfully but contains no data rows | Confirm the CSV has at least one data row | references/troubleshooting.md#skill_empty_data |
SKILL_PARSE_ERROR | CSV parsing failed | Check encoding, delimiters, and CSV structure | references/troubleshooting.md#skill_parse_error |
SKILL_MISSING_COLUMNS | Expected columns or headers are missing | Check CSV headers and metadata columns | references/troubleshooting.md#skill_missing_columns |
SKILL_INVALID_TYPE | Expression values or parameters have the wrong type | Ensure numeric fields are numeric | references/troubleshooting.md#skill_invalid_type |
SKILL_SAMPLE_MISMATCH | Sample IDs do not match | Ensure the first column in group_file matches matrix column names | references/troubleshooting.md#skill_sample_mismatch |
SKILL_INVALID_DATA | Expression or annotation data is malformed | Check duplicate IDs, missing labels, and numeric values | references/troubleshooting.md#skill_invalid_data |
SKILL_INVALID_PARAMETER | Unsupported distance, linkage, or label parameter | Use one of the documented parameter values | references/troubleshooting.md#skill_invalid_parameter |
SKILL_TIMEOUT | Analysis exceeded the time limit | Increase --timeout_seconds and rerun | references/troubleshooting.md#skill_timeout |
SKILL_PLOT_ERROR | Plot device failed while writing PDF | Check output directory permissions and rerun | references/troubleshooting.md#skill_plot_error |
SKILL_WRITE_ERROR | Output or intermediate files could not be written | Check output directory permissions and free disk space | references/troubleshooting.md#skill_write_error |
SKILL_WARNING | Non-fatal warning occurred during execution | Inspect console warnings and verify output quality | references/troubleshooting.md#skill_warning |
SKILL_MEMORY_WARNING | Memory usage exceeded the warning threshold | Reduce input size or rerun with more memory | references/troubleshooting.md#skill_memory_warning |
IF error persists, READ: references/troubleshooting.md
# Check help
Rscript scripts/main.R --help
# Run with sample data
Rscript scripts/main.R \
-i tests/data/sample_expression_matrix.csv \
-g tests/data/sample_groups.csv \
-o ./output/
# Run unit tests (requires testthat and data.table)
Rscript tests/run_tests.R# Check main output plot exists
ls -la ./output/hierarchical_clustering_plot.pdf
# Inspect clustering order
wc -l ./output/clustering_order.csvoptparseset.seed() for reproducibilitySKILL_* error classificationsetTimeLimit()sink()on.exit()gc()scripts/tests/testthat/SKILL_* codesget_script_dir() defined before usescripts/ directoryreferences/ directoryLast updated: 2026-04-16 | Version: 1.0.0
f5ef65b
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.