# 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()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)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.txtAtajos 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 deactivateCuando 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
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:
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)
?maxPaquetes 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] 5Los 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 → FALSESeleccionar 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 6Funciones
# 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))
#> 4Directorio 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")
m1Data.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)
- Abre la terminal y practica: ¿en qué directorio estás? (
pwd), ¿qué archivos hay enraw_fastqs/? (ls -lh raw_fastqs/) - Revisa la estructura de carpetas de
metabarcoding-code/— ¿coincide con el esquema de arriba?