Bioconductor: instalación y filosofía

r
bioconductor
rnaseq
Qué es Bioconductor, en qué se distingue de CRAN, cómo se instala con BiocManager, los ciclos de release y por qué importan para reproducibilidad.

Qué es Bioconductor

Bioconductor es un repositorio de paquetes de R paralelo a CRAN, especializado en bioinformática y biología computacional. Más de 2.000 paquetes para todo lo que toca biología molecular: secuenciación (RNA-seq, ChIP-seq, ATAC-seq, single-cell), microarrays, proteómica, anotación genómica, datos clínicos, imagen, citometría.

No es un “CRAN para biólogos”, es una infraestructura propia con principios distintos:

  • Clases S4 compartidas (SummarizedExperiment, GRanges, Biostrings).
  • Releases sincronizados: todos los paquetes con la misma versión de R en cada ciclo.
  • Revisión más exigente: los paquetes pasan un proceso de vetting más estricto que CRAN.
  • Documentación con vignettes narrativas, casi siempre.

Es lo que separa “scripts artesanales” de “análisis estándar reproducible”. Aprenderlo merece la pena.

CRAN vs Bioconductor

CRAN Bioconductor
Foco General Biología computacional
Instalación install.packages() BiocManager::install()
Release Cada paquete a su ritmo Sincronizado (Bioc 3.18, 3.19…)
Compatibilidad Best-effort Garantizada dentro del release

La consecuencia práctica: no mezcles versiones. Un Bioc 3.18 no es compatible con paquetes de 3.19 sin más. Si fijas un release, todo lo demás encaja.

Instalación

Paso 1: instalar BiocManager (una vez)

install.packages("BiocManager")

BiocManager es el gestor oficial. No uses install.packages() para paquetes de Bioc, falla o instala una versión vieja desde CRAN si coincide nombre.

Paso 2: instalar paquetes

BiocManager::install(c("DESeq2", "SummarizedExperiment", "airway"))

La primera vez te preguntará si quieres actualizar dependencias (Update all/some/none?). Acepta a (all) si estás empezando.

Paso 3: verificar coherencia

BiocManager::valid()
# TRUE si todo está alineado, o un informe si hay desajustes

valid() te dice si tu instalación está consistente. Cuando da problemas (out-of-date, too new), aplica lo que sugiere, normalmente un par de install() específicos.

El ciclo de release

Bioconductor saca dos releases al año, en abril y octubre. Cada release usa una versión específica de R:

Bioc R
3.18 R 4.3
3.19 R 4.4
3.20 R 4.4
3.21 R 4.5

Si actualizas R a una nueva versión mayor, tienes que reinstalar todos los paquetes Bioc del release correspondiente. Es lo más friccional al actualizar R y la razón principal por la que mucha gente fija versión durante un análisis.

Comprobar tu release actual:

BiocManager::version()
# [1] '3.20'

Mantener versiones para reproducibilidad

Bioconductor cambia entre releases. Una pipeline que funciona en Bioc 3.18 puede dar resultados distintos en 3.20 (mejoras en los modelos, cambios de defaults, nuevas funciones). Para análisis serios:

  • Anota el release usado en el documento Quarto / informe.
  • sessionInfo() al final del análisis, siempre. Captura versiones exactas.
  • Para reproducibilidad fuerte, renv o Docker con la imagen oficial bioconductor/bioconductor_docker:RELEASE_3_20. Lo veremos al final de la ruta.

Estructura de un paquete típico

Los paquetes Bioconductor siguen una estructura más rica que los de CRAN. Lo que vas a ver al cargar uno:

library(DESeq2)
# Loading required package: SummarizedExperiment
# Loading required package: GenomicRanges
# Loading required package: IRanges
# ...

Cargar DESeq2 arrastra una pirámide de dependencias. Es normal y deseado: Bioconductor reutiliza clases (SummarizedExperiment viene del paquete del mismo nombre). El “warm-up” inicial es ruidoso pero solo ocurre una vez por sesión.

Cada paquete trae:

  • browseVignettes("DESeq2"): guías narrativas con casos completos.
  • ?DESeq: ayudas de función al estilo R.
  • ?DESeqDataSet: ayudas de clases S4.

Las vignettes son el material de referencia primario. Si tienes una duda concreta sobre cómo usar un paquete, antes que Google está la vignette. Suelen ser excelentes.

Paquetes que vamos a usar en la ruta

Los principales:

BiocManager::install(c(
    "DESeq2",                 # análisis diferencial
    "SummarizedExperiment",   # contenedor
    "tximeta",                # importar counts de Salmon
    "airway",                 # dataset de ejemplo
    "vsn",                    # variance stabilization
    "pheatmap",               # heatmaps con clustering
    "EnhancedVolcano",        # volcano publicable
    "AnnotationDbi",          # anotación de IDs
    "org.Hs.eg.db",           # anotación humana
    "clusterProfiler"         # enriquecimiento funcional
))

Esta instalación tarda, son muchas dependencias compiladas. Hazla al principio, antes de empezar el siguiente tutorial.

Trampas habituales

  • install.packages("DESeq2"). Falla con mensaje confuso. Usa siempre BiocManager::install().
  • Mezcla de releases. Tener parte de Bioc 3.18 y parte 3.19 da errores crípticos (clases que “no encajan”). BiocManager::valid() lo detecta.
  • No actualizar dependencias. Cuando aparece Update all/some/none?, responder n (none) deja el sistema inconsistente. Acepta a si no tienes motivo concreto para fijar versiones.
  • Olvidar sessionInfo() en informes. Sin él, no se puede reproducir un análisis dentro de 6 meses. Es de las primeras cosas que se aprenden, y de las primeras que se olvidan.

En la siguiente entrega

Ya tienes el ecosistema instalado. Antes de tocar DESeq2, conviene entender de dónde salen los counts, el camino desde un archivo FASTQ hasta la matriz que carga R. Conceptual, sin código, pero esencial para no operar a ciegas. Lo siguiente.