Dipartimento di Informatica ITIS Leonardo da Vinci Carpi 2011 Introduzione al Linguaggio “R” di Giorgio Valentini - Rev. 1 di Sergio Capone: ftp://ftp.itisvinci.com Dipartimento di Informatica ITIS Leonardo da Vinci Carpi 2011
Cos’è “R”? E’ un applicativo che dispone di un’ambiente specifico per l’elaborazione interattiva1 di dati È un ambiente di sviluppo integrato2 ed è un “software open source” reperibile su Internet. Quindi è un ambiente di risorse software integrate per la gestione e l’elaborazione di dati e per l’ulteriore loro rappresentazione grafica R si interfaccia verso programmi e/o moduli scritti anche con altri linguaggi Elaborazione interattiva: I dati elaborati sono forniti come risultato dal programma e sono subito disponibili e quindi possono essere di seguito nuovamente elaborati producendo nuovi risultati che a loro volta possono essere nuovamente elaborati fino al risultato cercato. Interattivo: 1) detto di un programma o di un moderno sistema operativo la cui elaborazione è controllabile o modificabile dall'utente. Ogni comando dell'utente comporta una risposta del computer. Il modello di elaborazione interattiva, le cui ricerche partirono all'inizio degli anni '60 (Cfr. Morelli [MMD-2001] - JOSS in Time-sharing, Negroponte [NNE-1995,p.94]), si contrappone a quello di elaborazione batch (raggruppamento a lotti dei job simili) utilizzato soprattutto negli anni '50. Vd. Anche Foreground, On Line, Simulazione. In Criscione [CAW-2006] si distingue: l'interattività, riferita al dialogo uomo - macchina. La macchina simula un'attività conversazionale; l'interazione, che concerne il rapporto tra persone. In Tim Berners-Lee, inventore del World Wide Web[BTA-1999,p.148]: "Tutta la mia definizione di interattivo non comprende solo la possibilità di sceglire, ma anche di creare. (...) Non solo di interagire con gli altri, ma anche di creare con gli altri. L'intercreatività vuol dire fare cose o risolvere insieme problemi. Se l'interattività non signifca soltanto stare seduti passivamente davanti a uno schermo, allora l'intercreatività non significa solo starsene seduti di fronte a qualcosa di "interattivo". 2) Sono detti processi interagenti quei processi il cui avanzamento può essere condizionato dall'avanzamento degli altri. Rif. IPC (Interprocess Communication). 2. IDE: acrostico con due significati, a seconda del contesto in cui viene collocato. 1) Parlando di hardware, il suo significato è Integrated (o Intelligent) Drive Electronics ed indica un'interfaccia per dispositivi di memorizzazione di massa in cui il controller è integrato nel dispositivo stesso. È un sinonimo comunemente usato di ATA. cfr. EIDE e HD. 2) In un contesto software il termine sta per Integrated Development Environment e, come si può intuire, indica un programma atto a facilitare lo sviluppo di software; l'esempio più semplice consiste in un editor di testo che oltre a permette la stesura del codice (in un certo linguaggio) da la possibilità di compilarlo e di effettuarne il debugging.
Caratteristiche generiche di “R” R è un linguaggio ad alto livello1 orientato alla analisi dei dati R è un linguaggio ad alto livello interpretato2 R è dotato di un insiemi di operatori, ad alto livello, per effettuare calcoli su array3 e matrici R supporta paradigmi di programmazione imperativa, object-oriented e funzionale4. Linguaggio di alto/basso livello: per linguaggio di alto livello si intende un linguaggio di programmazione più intuitivo e comprensibile per il programmatore, contrapposto a quello di basso livello, più vicino al linguaggio macchina, come il linguaggio Assembly. Le istruzioni dei linguaggi di alto livello vengono compilate o interprete per essere eseguite da una comput Interpretazione: processo di traduzione di un codice nella quale le istruzioni sono convertite una alla volta da un linguaggio di partenza, o sorgente, al linguaggio macchina. Per eseguire un codice interpretato è necessario contenere nella memoria RAM anche l'interprete necessario alla traduzione. Tale processo richiede quindi una quantità di tempo superiore a quella necessaria alla compilazione. L'interpretazione è quindi adatta per singoli comandi (ad esempio quelli UNIX) o programmi da eseguire una sola volta, o ancora per programmi che eseguono molte operazioni di input/output (I/O bound) per i quali la velocità di elaborazione della CPU è trascurabile. Per un programmatore scrivere un codice in linguaggio interpretato è vantaggioso perchè nella fase di ricerca degli errori (debugging), avendo immediato responso del risultato dell'esecuzione dell'istruzione interpretata, individua con minore difficoltà gli errori logici (o semantici) che la macchina non saprebbe riconoscere. Due notevoli svantaggi sono però i seguenti: - in un programma interpretato si incorre in un errore soltanto quando si esegue la porzione di codice che lo contiene, perciò sarà necessario accertarsi di aver testato l'esecuzione di ogni singola istruzione del programma; - il codice sorgente rimane visualizzabile e quindi facilmente riutilizzabile e modificabile da parte del potenziale acquirente. Cfr. Linguaggi pseudo-compilati, Shell.er. Array: successione ordinata di locazioni di memoria. Programmazione: creazione di programmi, definizione di automatismi per mezzo di uno specifico linguaggio di programmazione. Per la programmazione è spesso necessaria un'attenta analisi della realtà e degli elementi da simulare (vd. Simulazione). I linguaggi si distinguono in quanto modellati sui seguenti paradigmi di programmazione: - paradigma imperativo (o procedurale - orientato all'assegnamento): il programmatore deve trovare un algoritmo ed esprimerlo come una sequenza di comandi che elaborano dati per ottenere il risultato desiderato. Esempi di linguaggi imperativi sono: BASIC, PASCAL, COBOL, FORTAN e ADA. - paradigma dichiarativo: il programmatore deve ricercare un algoritmo con lo scopo di utilizzarlo per la sola descrizione del problema in termini di funzioni o di regole, così il traduttore ottiene il risultato applicando un procedimento automatico e spesso ricorsivo; il programmatore descrive le relazioni tra i dati, piuttosto che specificarne l'esatta sequenza di elaborazione. Una modalità della programmazione dichiarativa è la programmazione logica offerta dal Prolog. - paradigma funzionale: concepisce il processo di sviluppo dei programmi come connessione di scatole nere predefinite. Ognuna di esse accetta un valore d'ingresso (input) e produce un valore di uscita (output). I concetti fondamentali sono le funzioni, le composizioni di funzioni, le ricorsioni e le espressioni condizionali. I linguaggi funzionali consentono l'uso di funzioni di ordine superiore, ovvero funzioni che prendono funzioni come argomento o restituiscono funzioni come valore. Alcuni linguaggi funzionali sono: LISP, ML ed SML. Anche il modello di programmazione funzionale è compreso nel paradigma dichiarativo. - paradigma ad oggetti: anzichè definire un programma come singola lista d'istruzioni, esso viene definito da un insieme di strutture software (oggetti) che offrono funzionalità esterne ad altri oggetti attraverso un'interfaccia, separata dalla propria struttura interna.
“R” per la bioinformatica R è uno dei linguaggi maggiormente utilizzati dalla comunità internazionale dei bioinformatici R permette di strutturare dati complessi ed eterogenei R dispone di library1 (librerie/biblioteche) specifiche per la bioinformatica R è il linguaggio utilizzato dal progetto internazionale open source Bioconductor* per la gestione ed elaborazione di dati genomici2 e proteomici3 Libreria: il termine library è comunemente tradotto in lingua italiana come libreria quando, invece, sarebbe più corretto tradurlo come biblioteca, anche dal punto di vista semantico. Il termine identifica in generale un insieme di funzioni, procedure o servizi a disposizione dell'utente, solitamente nelle vesti di programmatore. A grandi linee, le library possono essere classificate a seconda della tipologia di binding (ovvero la modalità con cui vengono "attaccate" al Programma che le utilizza) in dinamiche o statiche. Le prime (un esempio delle quali è rappresentato dalle DLL di Windows) vengono "collegate" al programma che le utilizza solamente al momento dell'esecuzione. Solitamente, soprattutto per le library utilizzate più frequentemente, questo si traduce in un migliore utilizzo della memoria di massa e di sistema (vd. RAM). Infatti, se più programmi diversi utilizzano le medesime library ne è necessaria solamente una copia in memoria. Inoltre, l'utilizzo di library dinamiche può permettere una maggiore libertà di sviluppo e una migliore manutenzione dei programmi. Le seconde, invece, vengono “incorporate" al programma che le utilizza, una volta per tutte, nella fase di linking (vd. compilatore), ossia al momento della creazione del programma (eseguibile) vero e proprio. Di conseguenza, programmi diversi che utilizzano le stesse library (non dinamiche) avranno bisogno ognuno della propria porzione di codice aggiuntivo (sprecando, in linea di massima, memoria fisica e di massa). Inoltre, una modifica nel codice di una delle library utilizzate da un programma comporta la ricompilazione del programma stesso. La genomica è una branca della biologia molecolare che si occupa dello studio del genoma degli organismi viventi. La proteomica consiste nell'identificazione sistematica di proteine e nella loro caratterizzazione rispetto a struttura, funzione, attività, quantità e interazioni. * Bioconductor è un progetto open source, a sviluppo aperto ed è diretto a fornire strumenti software per l'analisi e la comprensione di un elevato throughput di dati genomici. Bioconductor utilizza e implementa il linguaggio di programmazione statistica R. Bioconductor esce con due versioni software annuali, dispone di più di 460 pacchetti, e muove una folta comunità di utenti attivi.
L’utile storia di “R” “R” deriva dal linguaggio “S”, progetto sviluppato da John Chambers negli anni ‘80 presso i Bell Laboratory. “S” ha consentito a John Chamber nel 1999 di ritirare il prestigioso ACM Software Systems Award. R è un progetto Open Source: Il progetto nasce inizialmente grazie a Ross Ihaka e Robert Gentleman dell’Università di Auckland (Nuova Zelanda) Attualmente è seguito da una comunità internazionale di ricercatori e sviluppatori sia in ambito accademico che industriale È un progetto incentrato sul web: www.r-project.org Dispone di archivi software e documentazione: cran.r-project.org/
Dove viene usato? Agricoltura, astrofisica, climatologia, ecologia e studi ambientali, economia, ingegneria elettrica e elettronica, finanza, genetica e bioinformatica, geografia, psicologia, scienze sociali … …
Dove prelevare “R”? Al CRAN (the Comprehensive R Archive Network) http://cran.r-project.org/ Sono disponibili distribuzioni binarie per : Linux per tutte le principali distribuzioni Apple Macintosh e MacOS X dalla 8.6 e succ. Windows dalla ver. 95 a Seven 32 e 64 bit Unix (su diverse piattaforme hardware)
Risorse testuali Un corso introduttivo scaricabile dal web: W. Venables and D.M. Smith, An Introduction to R: http://cran.r-project.org/doc/manuals/R-intro.pdf . 2008 Libri sulla programmazione “avanzata” in R: 1) Robert Gentleman R Programming for Bioinformatics, CRC/Computer Science & Data Analysis Volume 12 , Chapman & Hall, 2008 2) J. Chambers Software for Data Analysis: Programming with R, Springer, 2008
Risorse per la bioinformatica Materiale didattico è alle pagine web del corso: “Linguaggi di Programmazione per la Bioinformatica”: http://homes.dsi.unimi.it/~valenti/LPBio0708.htm Un libro specifico sull’ utilizzo di R per la bioinformatica e Bioconductor: Gentleman, R.; Carey, V.; Huber, W.; Irizarry, R.; Dudoit, S. Bioinformatics and Computational Biology Solutions using R and Bioconductor, Springer, 2005