Outdated version of the documentation. Find the latest one here.

17.32. Sintassi di R negli script di Processing

Modulo fornito da Matteo Ghetta - finanziato dalla Scuola Superiore Sant’Anna

Scrivere script di R in Processing potrebbe essere leggermente complicato a causa della sintassi che deve essere adottata.

Ogni script inizia con Input e Output preceduto da ##.

17.32.1. Input

Prima di specificare gli input puoi anche impostare il gruppo degli algoritmi nel quale il tuo script sarà inserito. Se il gruppo esiste già, l’algoritmo sarà aggiunto agli altri, altrimenti sarà automaticamente creato un nuovo gruppo:

  1. creazione del gruppo, ##My Group=group

Then you have to specify all the input types and eventually the additional parameters. You can have different inputs:

  1. vettore, ##Layer = vector

  2. Campo del vettore, ##F = Field Layer (dove Layer è il nome del vettore in ingresso)

  3. tabella, ##Layer = raster

  4. numero, ##Num = number

  5. stringa, ##Str = string

  6. booleano, ##Bol = boolean

puoi anche avere un menu a tendina con tutti i parametri che vuoi; gli elementi devono essere separati con punto e virgola ;:

  1. ##type=selection point;lines;point+lines

17.32.2. Output

Come per gli input, ogni output deve essere definito all’inizio dello script:

  1. vettore, ##output= output vector

  2. raster, ##output= output raster
  3. table, ##output= output table
  4. plots, ##showplots
  5. Per l’output di R nel Visualizzatore Risultati, inserisci all’interno dello script > prima dell’output che vuoi visualizzare

17.32.3. Corpo dello script

Il corpo dello script segue la sintassi di R e il pannello di Log può aiutarti se qualcosa non funziona nel tuo script.

Ricorda che nello script devi caricare tutte le librerie aggiuntive:

library(sp)

17.32.3.1. Esempio con vettore in uscita

Let’s take an algorithm from the online collection that creates random points from the extent of an input layer:

##Point pattern analysis=group
##Layer=vector
##Size=number 10
##Output= output vector
library(sp)
pts=spsample(Layer,Size,type="random")
Output=SpatialPointsDataFrame(pts, as.data.frame(pts))

e ottieni attraverso le linee:

  1. Point pattern analysis è il gruppo dell’algoritmo

  2. Layer is the vettore in ingresso

  3. Size è il parametro numerico con un valore predefinito di 10

  4. Output è il vettore che sarà creato dall’algoritmo

  5. library(sp) carica la libreria sp (che dovrebbe essere già installata sul tuo computer e la cui installazione deve essere fatta in R)

  6. call the spsample function of the sp library and pass it to all the input defined above
  7. crea il vettore in uscita con la funzione SpatialPointsDataFrame

Fatto! Esegui semplicemente l’algoritmo con un vettore a disposizione nella Legenda di QGIS, scegli il numero di punti casuali e li visualizzerai nell’Area di Mappa di QGIS.

17.32.3.2. Esempio con raster in uscita

Lo script seguente eseguirà un kriging ordinario di base e creerà una mappa raster dei valori interpolati:

##Basic statistics=group
##Layer=vector
##Field=Field Layer
##Output=output raster
require("automap")
require("sp")
require("raster")
table=as.data.frame(Layer)
coordinates(table)= ~coords.x1+coords.x2
c = Layer[[Field]]
kriging_result = autoKrige(c~1, table)
prediction = raster(kriging_result$krige_output)
Output<-prediction

da un vettore e il suo campo in ingresso l’algoritmo userà la funzione autoKrige` del pacchetto di R ``automap e inizialmente calcolerà il modello di kriging e successivamente creerà un raster.

Il raster è creato con la funzione raster del pacchetto raster di R.

17.32.3.3. Esempio con tabella in uscita

Modifichiamo l’algoritmo Summary Statistics in modo che l’output sia un file tabella (csv).

Il corpo dello script è il seguente:

##Basic statistics=group
##Layer=vector
##Field=Field Layer
##Stat=Output table
Summary_statistics<-data.frame(rbind(
sum(Layer[[Field]]),
length(Layer[[Field]]),
length(unique(Layer[[Field]])),
min(Layer[[Field]]),
max(Layer[[Field]]),
max(Layer[[Field]])-min(Layer[[Field]]),
mean(Layer[[Field]]),
median(Layer[[Field]]),
sd(Layer[[Field]])),row.names=c("Sum:","Count:","Unique values:","Minimum value:","Maximum value:","Range:","Mean value:","Median value:","Standard deviation:"))
colnames(Summary_statistics)<-c(Field)
Stat<-Summary_statistics

La terza linea specifica il Vector Field in ingresso e la quarta linea dice all’algoritmo che l’output sarà una tabella.

L’ultima linea utilizzerà l’oggetto Stat creato nello script e lo convertirà in una tabella csv.

17.32.3.4. Example with console output

We can take the previous example and instead of creating a table, print the result in the Result Viewer:

##Basic statistics=group
##Layer=vector
##Field=Field Layer
Summary_statistics<-data.frame(rbind(
sum(Layer[[Field]]),
length(Layer[[Field]]),
length(unique(Layer[[Field]])),
min(Layer[[Field]]),
max(Layer[[Field]]),
max(Layer[[Field]])-min(Layer[[Field]]),
mean(Layer[[Field]]),
median(Layer[[Field]]),
sd(Layer[[Field]])),row.names=c("Sum:","Count:","Unique values:","Minimum value:","Maximum value:","Range:","Mean value:","Median value:","Standard deviation:"))
colnames(Summary_statistics)<-c(Field)
>Summary_statistics

The script is exactly the same of above with just 2 edits:

  1. no more output specified (the fourth line has been removed)
  2. the last line begins with > that tells Processing to print the object in the result viewer

17.32.3.5. Example with plot

Creating plots is very simple. You have to use the ##showplots parameter as the following script shows:

##Basic statistics=group
##Layer=vector
##Field=Field Layer
##showplots
qqnorm(Layer[[Field]])
qqline(Layer[[Field]])

the script takes a field of the vector layer in input and creates a QQ Plot to test the normality of the distribution.

The plot is automatically added to the Result Viewer of Processing.