Segnaposto
Ultimo aggiornamento il 2025-04-05 | Modifica questa pagina
Tempo stimato: 70 minuti
Panoramica
Domande
- “Come si crea una regola generica?”
Obiettivi
- “Vedere come Snakemake gestisce alcuni errori”
Il nostro Snakefile presenta alcune duplicazioni. Per esempio, i nomi dei file di testo sono ripetuti in alcuni punti delle regole dello Snakefile. Gli Snakefile sono una forma di codice e, in qualsiasi codice, la ripetizione può portare a problemi (ad esempio, rinominiamo un file di dati in una parte dello Snakefile, ma dimentichiamo di rinominarlo altrove).
D.R.Y. (Don’t Repeat Yourself)
In molti linguaggi di programmazione, la maggior parte delle caratteristiche del linguaggio serve a consentire al programmatore di descrivere lunghe routine di calcolo come codice breve, espressivo e bello. Le caratteristiche di Python, R o Java, come le variabili e le funzioni definite dall’utente, sono utili in parte perché ci evitano di dover scrivere (o pensare) tutti i dettagli più volte. Questa buona abitudine di scrivere le cose solo una volta è nota come principio “Non ripetere te stesso” o D.R.Y.
Rimuoviamo alcune ripetizioni dal nostro Snakefile.
Segnaposto
Per creare una regola più generica abbiamo bisogno di placeholder. Vediamo l’aspetto di un segnaposto
Come promemoria, ecco la versione precedente dell’ultimo episodio:
PYTHON
rule hostname_remote:
output: "hostname_remote.txt"
input:
shell:
"hostname > hostname_remote.txt"
La nuova regola ha sostituito i nomi di file espliciti con cose in
{curly brackets}
, in particolare {output}
(ma
avrebbe potuto essere anche {input}
… se avesse avuto un
valore e fosse stato utile).
{input}
e {output}
sono dei
segnaposto
I segnaposto sono usati nella sezione shell
di una
regola e Snakemake li sostituisce con valori appropriati -
{input}
con il nome completo del file di input e
{output}
con il nome completo del file di output - prima di
eseguire il comando.
anche {resources}
è un segnaposto e si può accedere a un
elemento nominato di {resources}
con la notazione
{resources.runtime}
(per esempio).
Punti Chiave
- “Le regole di Snakemake sono rese più generiche con i segnaposto”
- “I segnaposto nella parte shell della regola vengono sostituiti con valori basati sui caratteri jolly scelti”