17.33. Utilizzare gli script R in Processing
Modulo realizzato da Matteo Ghetta - finanziato dalla Scuola Superiore Sant’Anna
Processing (con il plugin Processing R Provider
) consente di scrivere ed eseguire script R all’interno di QGIS.
Avvertimento
R deve essere installato sul computer e il PATH deve essere impostato correttamente. Inoltre Processing si limita a chiamare i pacchetti R esterni, non è in grado di installarli. Assicurati quindi di installare i pacchetti esterni direttamente in R. Vedi il relativo chapter nel manuale d’uso.
Nota
Se hai problemi con il package, è possibile che manchino i pacchetti obbligatori richiesti da Processing, come sp
, rgdal
e raster
.
17.33.1. Aggiungere script
Aggiungere uno script è semplice. Il modo più semplice è aprire la casella degli strumenti di Processing e scegliere processing/rscripts
). Una volta salvato, sarà disponibile per la modifica facendo clic con il pulsante destro del mouse sul nome dello script nella finestra degli strumenti di elaborazione e scegliendo ).
Nota
Se non riesci a vedere R in Processing, devi attivarlo in
Apre una finestra dell’editor di script in cui in cui devi specificare alcuni parametri prima di poter aggiungere il corpo dello script.
17.33.2. Realizzare grafici
In questa esercitazione creeremo un boxplot di un campo di un layer vettoriale.
Apri il progetto QGIS r_intro.qgs
nella cartella exercise_data/processing/r_intro/
.
Parametri dello script
Apri l’editor e comincia a scrivere all’inizio dello stesso.
Devi specificare alcuni parametri prima del corpo dello script:
Il nome del gruppo (plots in questo caso) in cui si vuoi inserire lo script (se il gruppo non esiste, verrà creato):
##plots=group
Troverai il tuo script nel gruppo R plots nella casella degli strumenti di Processing.
Devi dire a Processing che vuoi visualizzare un grafico (in questo esempio):
##showplots
Troverai quindi un collegamento al grafico nel pannello Visualizzatore risultati (può essere attivato/disattivato in :menuselection: Visualizza –> Pannelli e con :menuselection:Processing –> Visualizzatore risultati`).
Devi inoltre indicare a Processing i dati in ingresso. In questo esempio vogliamo creare un grafico da un campo di un layer vettoriale:
##Layer=vector
Processing ora sa che l’input è un vettore. Il nome Layer non è importante, ciò che conta è il parametro vector.
Infine, devi specificare il campo di input del layer vettoriale (usando il nome che hai fornito sopra - Layer):
##X=Field Layer
Processing ora sa che ti è necessario un campo di Layer e che lo chiamerai X.
È anche possibile definire il nome dello script utilizzando
name
:##My box plot script=name
Se non viene definito, il nome del file verrà utilizzato come nome dello script.
Corpo dello script
Ora che hai impostato l”intestazione dello script, puoi aggiungere la funzione:
boxplot(Layer[[X]])
boxplot è il nome della funzione R, il parametro Layer è il nome definito per il set di dati di input e X è il nome definito per il campo di tale set di dati.
Avvertimento
Il parametro X deve essere racchiuso tra doppie parentesi quadre ([[]]
).
Lo script finale si presenta così:
##Vector processing=group
##showplots
##Layer=vector
##X=Field Layer
boxplot(Layer[[X]])
Salva lo script nel percorso predefinito suggerito da Processing (processing/rscripts). Se non hai definito un ``name”” nell’intestazione dello script, il nome del file scelto diventerà il nome dello script nella casella degli strumenti di Processing.
Nota
Puoi salvare lo script dove vuoi, ma Processing non sarà in grado di includerlo automaticamente nella casella degli strumenti di elaborazione, quindi dovrai caricarlo manualmente.
Ora è sufficiente eseguirlo utilizzando il pulsante in alto nella finestra dell’editor:
Una volta chiusa la finestra dell’editor, utilizza la casella di testo di Processing per trovare il tuo script:
Ora puoi inserire i parametri richiesti nella finestra dell’algoritmo di elaborazione:
per Layer scegli sample_points
per il campo X scgli value
Clicca su Esegui.
La finestra Risultati dovrebbe aprirsi automaticamente; in caso contrario, fai clic su
.Fai clic sul link nel visualizzatore e si vedrà:
Nota
Puoi aprire, copiare e salvare l’immagine facendo clic con il tasto destro del mouse sul grafico.
17.33.3. Creare un vettore
Puoi anche creare un layer vettoriale e caricarlo automaticamente in QGIS.
L’esempio seguente è stato tratto dallo script ``Random sampling grid”” che si trova nella raccolta online di script R (gli script di questa raccolta online si trovano in https://github.com/qgis/QGIS-Processing/tree/master/rscripts).
Lo scopo di questo esercizio è creare un layer vettoriale di punti casuali usando un layer vettoriale di input per limitare l’estensione usando la funzione spsample
del package sp
.
Parametri dello script
Come in precedenza, dobbiamo impostare alcuni parametri prima del corpo dello script:
Specificare il nome del gruppo in cui si desidera inserire lo script, in questo caso Point pattern analysis:
##Point pattern analysis=group
Definire un parametro in ingresso (un layer vettoriale) che vincoli il posizionamento dei punti casuali:
##Layer=vector
Impostare un parametro di input per il numero di punti che verranno creati (
Size
, con un valore predefinito di10
):##Size=number 10
Nota
Poiché è definito un valore predefinito (
10
), l’utente può modificare questo numero o lasciare il parametro senza un numero.Specificare che esiste un layer vettoriale di uscita (chiamato
Output
):##Output=output vector
Corpo dello script
Ora puoi aggiungere il corpo della funzione:
Utilizza la funzione
spsample
:pts=spsample(Layer, Size, type="random")
La funzione utilizza il Layer per vincolare il posizionamento dei punti (se si tratta di un layer di linee, un punto dovrà trovarsi su una delle linee del layer, se si tratta di un layer di poligoni, un punto dovrà trovarsi all’interno di un poligono). Il numero di punti viene preso dal parametro Size. Il metodo di campionamento è random.
Genera il risultato (il parametro
Output
):Output=SpatialPointsDataFrame(pts, as.data.frame(pts))
Lo script finale si presenta così:
##Point pattern analysis=group
##Layer=vector
##Size=number 10
##Output=output vector
pts=spsample(Layer, Size, type="random")
Output=SpatialPointsDataFrame(pts, as.data.frame(pts))
Salvalo ed eseguilo, facendo clic sul pulsante di esecuzione.
Nella nuova finestra digita i parametri corretti:
e fai clic su Esegui.
Il layer risultante verrà aggiunto all’indice e i suoi punti verranno visualizzati sulla area di disegno della mappa:
17.33.4. Risultato testo e grafo da R - sintassi
Processing (con il plugin Processing R Provider
) utilizza una sintassi speciale per ottenere i risultati da R:
>
prima del comando, come in>lillie.test(Layer[[Field]])
significa che il risultato deve essere inviato all’output di R ( Visualizzatore Rrisultati)+
dopo un grafico abilita la sovrapposizione dei grafici. Ad esempioplot(Layer[[X]], Layer[[Y]]) + abline(h=mean(Layer[[X]]))
.