Metabarcoding de comunidades de eucariontes
  • Sesiones
  • Lecturas recomendadas
  1. Día 2
  2. Introducción a Linux y R
  • Día 1
    • Conexión a Zoom
    • Conexión al servidor
  • Día 2
    • Introducción a Linux y R
    • Introducción al pipeline DADA2
    • Nuestros datos: eDNA de peces del Golfo de California
    • Clonación de repositorio Github
    • Preparación del entorno
  • Día 3
    • Archivos FASTQ: estructura y organización
    • Control de calidad y recorte de primers con Cutadapt
    • DADA2 — Filtrado inicial
  • Día 4
    • Dada2 - Dereplicación e Inferencia de Errores
    • Dada2 - Unión de lecturas paired-end
    • Dada2 - Remoción de quimeras y seguimiento de lecturas
    • Dada2 - Asignación taxonómica y guardado de resultados
  • Día 5
    • Análisis ecológico de comunidades de peces
    • OTUs: agrupamiento por similitud con VSEARCH
    • Detección y remoción de contaminantes con decontam
    • Bases de datos de referencia personalizadas
  • Lecturas recomendadas
    • Referencias
  1. Día 2
  2. Introducción a Linux y R

Introducción a Linux y R

En bioinformática trabajamos directamente con la terminal (línea de comandos) y con R porque nos permiten automatizar tareas repetitivas, manejar archivos grandes y ejecutar pipelines reproducibles. En esta sesión aprenderemos los comandos esenciales para movernos en el servidor y las bases de R para correr nuestros análisis.


Parte 1 — Terminal Linux/Unix

¿Por qué usamos Linux en bioinformática?

La mayoría de las herramientas bioinformáticas (DADA2, cutadapt, FastQC, VSEARCH) están diseñadas para correr en sistemas tipo Unix/Linux. Los servidores de cómputo institucionales casi siempre tienen Linux, lo que hace indispensable saber moverse en la terminal.


Unix, Linux y Bash — ¿qué son y en qué se diferencian?

  • Unix es un sistema operativo desarrollado en los años 70 en los laboratorios Bell de AT&T. Es el ancestro común de muchos sistemas modernos y estableció la filosofía de “pequeñas herramientas que hacen una sola cosa bien”.

  • Linux es un sistema operativo libre y de código abierto inspirado en Unix, creado por Linus Torvalds en 1991. Es el sistema que corre en la gran mayoría de servidores de cómputo científico en el mundo, incluido el servidor del curso.

  • Bash (Bourne Again SHell) es el intérprete de comandos y el programa que lee lo que escribes en la terminal y lo ejecuta. Cuando abres una terminal en Linux, casi siempre estás usando Bash.

En el servidor: Linux es el sistema operativo, Bash es el idioma que usas para hablar con él, y Unix es el origen histórico de ambos.

Término Qué es Ejemplo
Unix Sistema operativo original (1969) Solaris, macOS
Linux Sistema operativo libre inspirado en Unix Ubuntu, CentOS
Bash Intérprete de comandos ls, cd, grep
Terminal La ventana donde escribes comandos iTerm2, GNOME Terminal
Shell Término genérico para el intérprete Bash, Zsh, Fish
# Ver qué shell estás usando
echo $SHELL
# /bin/bash

# Ver la versión de Bash
bash --version
# GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)

Navegación básica

La terminal muestra tu ubicación actual como el directorio de trabajo. Estos son los comandos más usados:

# Ver en qué carpeta estás
pwd

# Listar archivos y carpetas
ls
ls -lh    # con detalles (tamaño, permisos, fecha)
ls -a     # incluye archivos ocultos (empiezan con .)
ls -lhS   # ordenar por tamaño (más grande primero)

Ver la ayuda de cualquier comando

Hay dos formas de consultar todas las opciones disponibles de un comando:

# Manual completo (navegable con flechas, q para salir)
man ls

# Ayuda rápida (lista todas las opciones en pantalla)
ls --help

# También funciona con cualquier otro comando
man grep
cutadapt --help

man (de manual) es la forma estándar en Linux. --help suele ser más corto y directo. Para herramientas bioinformáticas como cutadapt o fastqc, --help es la opción más común.

# Moverte entre carpetas
cd metabarcoding-code        # entrar a una carpeta
cd ..                        # subir un nivel
cd ~                         # ir al directorio home
cd /home/usr01/metabarcoding-code   # ruta absoluta
# Crear, copiar y mover
mkdir nueva_carpeta          # crear carpeta
mkdir -p a/b/c               # crear estructura anidada
cp archivo.txt copia.txt     # copiar archivo
cp -r carpeta/ destino/      # copiar carpeta completa
mv archivo.txt otra_carpeta/ # mover archivo
mv nombre_viejo.txt nuevo.txt  # renombrar
# Eliminar (con cuidado — no hay papelera)
rm archivo.txt               # eliminar archivo
rm -r carpeta/               # eliminar carpeta y contenido

Inspeccionar archivos

# Ver contenido de archivos de texto
head -5 archivo.fastq        # primeras 5 líneas
tail -5 archivo.fastq        # últimas 5 líneas
less archivo.fastq           # navegar (q para salir)
cat archivo.txt              # mostrar todo el contenido
# Buscar texto dentro de archivos
grep "ATCG" secuencias.fastq          # líneas que contienen el patrón
grep -c "^@" archivo.fastq            # contar líneas que empiezan con @
grep -i "error" log.txt               # búsqueda sin distinguir mayúsculas
# Contar líneas, palabras y caracteres
wc -l archivo.txt            # número de líneas
wc -c archivo.fastq          # número de bytes (tamaño)

Permisos y gestión de archivos — chmod

chmod significa change mode y cambia los permisos de un archivo o carpeta. En Linux, cada archivo tiene tres tipos de permisos y se aplican a tres grupos distintos:

Permiso Letra Número
Leer (read) r 4
Escribir (write) w 2
Ejecutar (execute) x 1

Cuando haces ls -l, los permisos aparecen como una cadena de 9 letras divididas en tres grupos:

-rw-r--r--  1  tvaldivia  metabarcoding  4096  script.R
  │││ │││ │││
  │││ │││ └──── otros usuarios
  │││ └──────── grupo
  └──────────── dueño del archivo

Entonces -rw-r--r-- significa:

  • dueño puede leer y escribir (rw-)
  • grupo solo puede leer (r--)
  • otros solo pueden leer (r--)

Los scripts de bash necesitan permiso de ejecución para poder correrlos directamente. Sin +x verías el error Permission denied:

# Dar permiso de ejecución a un script
chmod +x scripts/02b-cutadapt.sh
bash scripts/02b-cutadapt.sh

# Otras combinaciones comunes
chmod 644 archivo.txt        # rw-r--r-- (lectura para todos, escritura solo dueño)
chmod 755 carpeta/           # rwxr-xr-x (carpeta accesible por todos)

Editar archivos en la terminal

nano script.sh               # editor simple (Ctrl+O guardar, Ctrl+X salir)

Pipes y redirección

Los pipes (|) conectan la salida de un comando con la entrada del siguiente. La redirección (>, >>) guarda la salida en un archivo. Son herramientas fundamentales en bioinformática.

# Pipe: encadenar comandos
ls -lh raw_fastqs/ | head -10          # listar y ver solo las primeras 10 líneas
grep "^@" archivo.fastq | wc -l        # contar lecturas en un FASTQ

# Redirección: guardar salida en archivo
ls raw_fastqs/ > lista_archivos.txt    # crea el archivo (sobreescribe si existe)
echo "nueva línea" >> lista_archivos.txt  # agrega al final sin sobreescribir

# Combinar pipe y redirección
grep "error" logs/*.txt | sort > errores.txt

Atajos de productividad en la terminal

Estos atajos ahorran mucho tiempo:

Atajo Función
Tab Autocompletar nombre de archivo o comando
Tab Tab Mostrar todas las opciones posibles
↑ / ↓ Navegar el historial de comandos
Ctrl + C Cancelar el comando que está corriendo
Ctrl + L Limpiar la pantalla (equivale a clear)
Ctrl + A Ir al inicio de la línea
Ctrl + E Ir al final de la línea
!! Repetir el último comando
history Ver historial de comandos
history | grep Rscript Buscar un comando en el historial

Hoja de referencia rápida

Comando Función
pwd Mostrar directorio actual
ls -lh Listar con detalles
cd carpeta Entrar a carpeta
mkdir -p Crear carpetas anidadas
cp -r Copiar recursivo
mv Mover o renombrar
rm -r Eliminar (irreversible)
head / tail Ver inicio/fin de archivo
less Navegar archivo (q = salir)
grep Buscar patrón en texto
wc -l Contar líneas
chmod +x Dar permiso de ejecución
nano Editar archivo en terminal

Entornos conda

Conda es un gestor de paquetes y entornos que permite instalar herramientas bioinformáticas (cutadapt, FastQC, VSEARCH) de forma aislada, sin que entren en conflicto entre sí. Un entorno es una carpeta con una versión específica de cada herramienta — como una “burbuja” independiente del resto del sistema.

En el curso todas las herramientas están preinstaladas en el entorno metabarcoding. Debes activarlo al inicio de cada sesión antes de correr cualquier análisis:

# Ver los entornos disponibles
conda env list

# Activar el entorno del curso
conda activate metabarcoding

# Verificar que las herramientas están disponibles
cutadapt --version
fastqc --version

# Desactivar el entorno al terminar
conda deactivate

Cuando el entorno está activo, verás su nombre entre paréntesis al inicio del prompt:

(base) usrXX@a240:~$             # antes de activar
(metabarcoding) usrXX@a240:~$   # después de conda activate metabarcoding
Advertencia

Si olvidas activar el entorno, los comandos como cutadapt o fastqc no serán encontrados y verás el error command not found.


Parte 2 — Introducción a R

Basado en material de Miguel Martinez Mercado (marmigues@gmail.com)

¿Por qué usamos R en metabarcoding?

R tiene los paquetes especializados que usamos en el curso: dada2, phyloseq, vegan, ggplot2. Además, los scripts en R son reproducibles y documentables con Quarto o R Markdown.

Características de R:

  • R es un lenguaje de cómputo con gran poder estadístico y gráfico
  • Software libre
  • Curva de aprendizaje pronunciada
  • R es sensible a mayúsculas/minúsculas

Uso general

Iniciar R desde la terminal:

# Desde la terminal de Linux, escribe:
# R

# El programa inicia con un mensaje de bienvenida.
# El prompt de R es: >
# Para salir de R:
q()

Al escribir código, uno o varios # al inicio de una línea hacen que R ignore el texto que le sigue. Usamos # para escribir comentarios y describir el código.


R como calculadora

# Sumar
1 + 1
#> [1] 2

# Otras operaciones:
# restar '-'
# multiplicar '*'
# dividir '/'

Cuando tecleamos un comando incompleto, el prompt cambia de > a +. No hay de qué preocuparse: podemos completar el comando o cancelarlo con Esc o Ctrl + C.

R mantiene un historial de los comandos. Podemos acceder al historial con las flechas del cursor arriba y abajo.

Para pedir ayuda sobre las funciones:

help(max)
?max

Paquetes y librerías

Cada función está en un paquete. Hay paquetes básicos que se instalan por default y paquetes especializados que el usuario instala.

# Cargar un paquete para usar sus funciones
library(stats)
mean(c(1, 3, 5))

# Podemos usar una función SIN cargar el paquete
stats::sd(c(1, 3, 5))

En bioinformática existe el proyecto Bioconductor que desarrolla y comparte software de acceso libre para análisis de datos biológicos.

# Instalar paquetes de CRAN (solo una vez)
install.packages("tidyverse")

# Instalar paquetes de Bioconductor
BiocManager::install("dada2")

# Cargar paquetes (cada sesión)
library(tidyverse)

Variables y vectores

Las variables se asignan con el operador <-:

x <- 2
y <- 3
x + y
#> [1] 5

Los vectores solo pueden contener un tipo de dato:

# Numérico
z <- c(2, 4, 6)
class(z)

# Caracteres
h <- c("Hola", "mundo")

# Lógico
b <- c(TRUE, FALSE, T, F)

# Longitud de un vector
length(z)
#> [1] 3

# Enlistar variables del espacio de trabajo
ls()

# Eliminar variables
rm(x)

Recomendaciones para nombrar variables:

  • Usar nombres que reflejen el contenido de la variable
  • Se pueden separar palabras con . o con _
  • No usar caracteres especiales

Comparaciones y operadores lógicos

a <- 3

a == pi   # igualdad → FALSE
a != pi   # desigualdad → TRUE
a < pi    # menor que → TRUE
a > pi    # mayor que → FALSE
a <= pi   # menor o igual → TRUE
a >= pi   # mayor o igual → FALSE

Seleccionar elementos de un vector

L <- c("A", "B", "C", "D", "E")

# Usar corchetes para indexar
L[3]
#> "C"

L[1:3]
#> "A" "B" "C"

L[c(1, 3, 5)]
#> "A" "C" "E"

# Selección por condición
z <- c(2, 4, 6)
z > 3
#> FALSE  TRUE  TRUE

z[z > 3]
#> 4  6

Funciones

# Una función para calcular el promedio
prom <- function(x) sum(x) / length(x)

prom(c(2, 4, 4, 6))
#> 4

# Funciones más elaboradas se contienen entre llaves
prom.long <- function(x) {
  j <- sum(x)
  k <- length(x)
  p <- j / k
  return(p)
}

prom.long(c(2, 4, 4, 6))
#> 4

Directorio de trabajo

# Obtener el directorio de trabajo
getwd()

# Definir el directorio de trabajo
mypath <- "/Ruta/al/directorio/de/interes"
setwd(mypath)

# Enlistar archivos en directorio de trabajo
list.files()

# Definir la ruta de un archivo en partes
file.path(mypath, "mis_datos.csv")

Matrices y data.frames

Matrices:

m1 <- matrix(nrow = 4, ncol = 2)
dim(m1)
nrow(m1)
ncol(m1)

m1[, 1] <- c(1, 3, 5, 7)
m1[, 2] <- c(2, 4, 6, 8)
colnames(m1) <- c("Nones", "Pares")
m1

Data.frames:

# Crear un data.frame
df <- data.frame(
  muestra = c("M1", "M2", "M3"),
  lecturas = c(15000, 22000, 8500),
  sitio = c("POR", "BSS", "GC")
)

# Acceder a columnas
df$muestra
df[, "lecturas"]

# Filtrar filas
df[df$lecturas > 10000, ]

Tipos de objetos más usados en DADA2

Objeto Tipo en R Ejemplo
Nombres de muestras character vector c("M1", "M2")
Rutas de archivos character vector list.files(...)
Tabla de lecturas matrix out de filterAndTrim()
Tabla de ASVs matrix seqtab
Taxonomía data.frame tax_df

Estructura de un script en R

Un script bien organizado tiene estas secciones:

# ============================================================
# Nombre del script: 03-dada2-pipeline.R
# Descripción: Pipeline DADA2 para metabarcoding
# Autor: Dr. Miguel A. Martínez / Dra. Tania Valdivia
# Fecha: 2025-10-28
# ============================================================

# 1. Cargar librerías ----------------------------------------
library(dada2)
library(tidyverse)

# 2. Definir rutas -------------------------------------------
proj_root <- here::here()
fastq_location <- file.path(proj_root, "for_dada2")

# 3. Análisis ------------------------------------------------
# ... código del pipeline ...

Literatura recomendada

  • Introduction to R. William Venables (Network Theory Limited)
  • R in a Nutshell. Joseph Adler (O’Reilly)
  • ggplot2: Elegant Graphics for Data Analysis. Hadley Wickham (Springer)

TipPara el curso
  1. Abre la terminal y practica: ¿en qué directorio estás? (pwd), ¿qué archivos hay en raw_fastqs/? (ls -lh raw_fastqs/)
  2. Revisa la estructura de carpetas de metabarcoding-code/ — ¿coincide con el esquema de arriba?
Conexión al servidor
Introducción al pipeline DADA2

© Dra. Tania Valdivia Carrillo — Todos los derechos reservados