Bash+R: come passare parametri da bash script a R

by Luca Rabboni

facebooktwittergoogle_pluspinterestlinkedintumblr

Nel mondo della data analysis, il termine automazione corre a braccetto con il termine “scripting”.   Non esiste il linguaggio di programmazione migliore, solo quello più idoneo per svolgere la funzione necessaria.

Nel nostro caso, molte procedure di data aggregation passano da server unix e collettano dati via API in tempo reale, ergo è findamentale assicurarsi che i dati vengano dirottati e formattati in maniera corretta ai vari sistemi di analisi/visualizzazione.

Nel nostro caso alcune procedure automatiche partono via cron di notte, richiamando una serie di script R con alcuni parametri.

Dovevamo far si che gli script R potessero eseguire alcune procedure o altre a seconda dei parametri passati via bash. La domanda era: come passare da bash ad R dei parametri in real time?

La risposta è molto semplice ed ha due aspetti da considerare: lo script bash che invoca lo script R passandogli dei parametri,e il file R stesso che deve leggere i parametri.

In questo esempio creeremo una variabile contenente la data di ieri (la variabile “fileshort”) e la passeremo a R per far salvare un file che abbia il nome contenuto nella stessa variabile.

Partiamo dallo script bash:

Come potete vedere viene semplicemente creata una variabile fileshort che viene passata nella call a R.  Per quanto concerne la sintassi per invocare R potete utilizzare sia “Rscript” che “R <“: il risultato sarà identico.

Passiamo ora allo script R.   Per prima cosa proviamo a dire al nostro script di intercettare i parametri/argomenti che gli vengono passati, stampandoli a schermo con il metodo print con potete vedere qui sotto:

 

a video  R stamperà questo:

 

Nel nostro caso il parametro richiesto è il nome del file, ovvero “test_20150201.csv” che è il sesto elemento dell’array [6].

A questo punto basta solo valorizzare una variabile con l’elemento che ci interessa:

name <- args[6]

ed utilizzare la nostra variabile come preferiamo. Nel nostro esempio per scrivere un file:

Il file generato sarà esattamente il file di nome “test_20150201.csv”

Enjoy!