17.32. Syntaxe R dans les scripts des Traitements

Module réalisé par Matteo Ghetta - financé par Scuola Superiore Sant’Anna

Ecrire des scripts R dans Traitement peut être un peu difficile du fait de la syntaxe à adopter.

Chaque script commence avec Input et Output précédé de ##.

17.32.1. Entrées

Avant d’indiquer les entrées, vous pouvez également indiquer le group d’algorithme dans lequel votre script sera intégré. Si le groupe existe déjà, l’algorithme y sera ajouté sinon un nouveau groupe sera automatiquement créé:

  1. création de groupe, ##Mon groupe=group

Vous devez ensuite indiquer toutes les entrées ainsi que les paramètres supplémentaires. Vous pouvez avoir différents types d’entrées:

  1. vector, ##Couche = vector

  2. Champ de la couche, ##F = Field Couche` (où Couche est le nom de la couche en entrée)

  3. table ##Couche = raster

  4. number, ##Num = number
  5. chaîne de caractères, ##Str = string

  6. booléen, ##Bol = boolean

Vous pouvez aussi faire apparaître un menu déroulant avec tous les paramètres que vous désirez; ils doivent être séparés par des point-virgules ;:

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

17.32.2. Sorties

Comme pour les entrées, chaque sortie doit être définie au début du script:

  1. vecteur, ##sortie= output vector

  2. raster, ##sortie= output raster

  3. table, ##sortie= output table

  4. graphiques, ##showplot

  5. R émet une sortie dans le Visualisateur de résultats, il faut juste indiquer ``>` dans le script avant la sortie que vous souhaitez afficher.

17.32.3. Corps du script

Le corps du script suit le style de syntaxe de R et le panneau Journal peut vous aider à vérifier ce qui s’est mal déroulé avec votre script.

Attention à bien charger toutes les bibliothèques additionnelles dans le script:

library(sp)

17.32.3.1. Exemple avec sortie vecteur

Prenons un algorithme de la collection de scripts en ligne qui créé des points aléatoires depuis l’emprise d’une couche en entrée:

##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))

et analysons chacune des lignes:

  1. Point pattern analysis est le groupe de l’algorithme.

  2. Layer est la couche vecteur en entrée.

  3. Size est le paramètres numérique avec une valeur par défaut de 10.

  4. Output est la couche vecteur qui sera créée par l’algorithme.

  5. library(sp) charge la bibliothèque sp (qui devrait être déjà installée sur votre machine et dont l’installation doit être réalisée dans R).

  6. Appelle la fonction spsample de la bibliothèque sp et l’utilise avec les entrées définies au-dessus.

  7. créé la couche vecteur de sortie avec la fonction SpatialPointsDataFrame.

C’est tout ! Lancez l’algorithme avec une couche vecteur ouverte dans QGIS, choisissez un nombre de points aléatoires et vous les récupérerez dans le canevas de carte.

17.32.3.2. Exemple avec sortie raster

Le script suivant effectuera un krigeage simple ordinaire et créera une couche raster des valeurs interpolées:

##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

L’algorithme utilisera la fonction autoKrige du paquet R automap, à partir d’une couche vecteur en entrée et d’un de ses champs et calculera d’abord le modèle de krigeage puis créera le raster.

Le raster est créé avec la fonction raster du paquetage raster R.

17.32.3.3. Exemple avec une sortie table

Éditons l’algorithme Summary Statistics de manière à ce que la sortie soit un fichier de table (csv).

Le corps du script est le suivant:

##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 troisième ligne indique le Champ vecteur et la quatrième ligne indique à l’algorithme que la sortie doit être une table.

La dernière ligne utilisera l’objet Stat créé dans le script et le convertira en une table csv.

17.32.3.4. Exemple de sortie de la console d’exécution de R

Nous pouvons prendre l’exemple précédent et au lieu de créer un tableau, afficher le résultat dans l’Afficheur de Résultat:

##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

Le script est identique à celui situé ci-dessus mais avec 2 modifications:

  1. Il n’y a plus de sortie indiquée (la quatrième ligne a été supprimée).

  2. La dernière ligne commence avec le caractère > qui indique à Processing d’afficher l’objet dans le visualisateur de résultats.

17.32.3.5. Exemple avec un graphique

Créer des graphiques est très simple. Vous devez juste utiliser le paramètre ##showplots comme indiqué dans le script qui suit:

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

Le script prend un champ de la couche vecteur en entrée et créé un diagramme Quantile-Quantile pour tester la normalité d’une distribution.

La graphique est automatiquement ajouté au Visualisateur de Résultats de Processing.