28.4. Appendix D: QGIS R script syntaxis
Bijgedragen door Matteo Ghetta - mogelijk gemaakt door Scuola Superiore Sant’Anna
Schrijven van scripts voor R in Processing kan een beetje ingewikkeld zijn vanwege de speciale syntaxis.
Elk script van R voor processing begint met de Inputs en de Outputs, voorafgegaan door dubbele tekens hash (##
).
Voor de invoeren, mag de groep met algoritmen, waarin het script moet worden geplaatst, worden gespecificeerd. Als de groep al bestaat, zal het algoritme daaraan worden toegevoegd, anders zal een nieuwe groep worden gemaakt. In het voorbeeld hieronder is de naam van de groep My group:
##My Group=group
28.4.1. Invoer
Alle gegevens en parameters voor de invoer moeten worden gespecificeerd. Er zijn verschillende soorten invoer:
vector:
##Layer = vector
vector field:
##F = Field Layer
(waar Layer de naam is van een invoer vectorlaag waartoe het veld behoort)raster:
##r = raster
table:
##t = table
number:
##Num = number
string:
##Str = string
boolean:
##Bol = boolean
elementen in een keuzemenu. De items moeten worden gescheiden door puntkomma’s
;
:##type=selection point;lines;point+lines
28.4.2. Uitvoer
Net als voor de invoer dient elke uitvoer te worden gedefinieerd aan het begin van het script:
vector:
##output= output vector
raster:
##output= output raster
table:
##output= output table
plots:
##output_plots_to_html
(##showplots in eerdere versies)Weergeven van uitvoer voor R in Resultaten bekijken, plaats
>
voor de opdracht waarvan u de uitvoer wilt weergeven.
28.4.3. Overzicht van syntaxis voor scripts van R in QGIS
Een aantal typen parameter voor in- en uitvoer worden aangeboden.
28.4.3.1. Typen parameters voor invoer
Parameter |
Voorbeeld van syntaxis |
Teruggeven van objecten |
---|---|---|
vector |
Layer = vector |
sf object (of SpatialDataFrame object, als ##load_vector_using_rgdal is gespecificeerd) |
vector point |
Layer = vector point |
sf object (of SpatialDataFrame object, als ##load_vector_using_rgdal is gespecificeerd) |
vector line |
Layer = vector line |
sf object (of SpatialDataFrame object, als ##load_vector_using_rgdal is gespecificeerd) |
vector polygon |
Layer = vector polygon |
sf object (of SpatialPolygonsDataFrame object, als ##load_vector_using_rgdal wordt gebruikt) |
meerdere vector |
Layer = multiple vector |
sf object (of SpatialDataFrame objects als ##load_vector_using_rgdal is gespecificeerd) |
tabel |
Layer = table |
dataframe conversie van csv, standaard object van de functie |
veld |
Field = Field Layer |
naam van het geselecteerde veld, bijv. |
raster |
Layer = raster |
RasterBrick object, standaard object van pakket |
meerdere raster |
Layer = multiple raster |
RasterBrick objecten, standaard object van pakket |
getal |
N = number |
gekozen integer of floating number |
tekenreeks |
S = string |
string toegevoegd in het vak |
longstring |
LS = longstring |
string toegevoegd in het vak, zou langer kunnen zijn dan een normale tekenreeks |
selectie |
S = selection first;second;third |
string van het geselecteerde item uit d ekeuzelijst |
crs |
C = crs |
string van het gekozen resulterende CRS, in de indeling: |
bereik |
E = extent |
Object Extent van het pakket |
punt |
P = point |
indien aangeklikt op de kaart, heeft u de coördinaten van het punt |
bestand |
F = file |
pad van het gekozen bestand, bijv. “/home/matteo/file.txt” |
map |
F = folder |
pad van de gekozen map, bijv. “/home/matteo/Downloads” |
Een parameter kan OPTIONAL zijn, wat betekent dat hij kan worden genegeerd.
Voor het instellen van een invoer als optioneel, voegt u de string optional
toe voor de invoer, bijv:
##Layer = vector
##Field1 = Field Layer
##Field2 = optional Field Layer
28.4.3.2. Typen parameters voor uitvoer
Parameter |
Voorbeeld van syntaxis |
---|---|
vector |
Output = output vector |
raster |
Output = output raster |
tabel |
Output = output table |
bestand |
Output = output file |
Notitie
U kunt plots opslaan als png
vanuit Processing Resultaten bekijken of u kunt er voor kiezen om het plot direct op te slaan vanuit de interface van het algoritme.
28.4.3.3. Tekst van het script
De tekst van het script volgt de syntaxis van R en het paneel Log kan u helpen als er iets mis is met uw script.
Onthoud dat u alle aanvullende bibliotheken in het script moet laden:
library(sp)
28.4.4. Voorbeelden
28.4.4.1. Voorbeeld met uitvoer als vector
Laten we een algoritme nemen uit de online collectie dat willekeurige punten maakt uit het bereik van een invoerlaag:
##Point pattern analysis=group
##Layer=vector polygon
##Size=number 10
##Output=output vector
library(sp)
spatpoly = as(Layer, "Spatial")
pts=spsample(spatpoly,Size,type="random")
spdf=SpatialPointsDataFrame(pts, as.data.frame(pts))
Output=st_as_sf(spdf)
Uitleg (per regel in het script):
Point pattern analysis
is de groep van het algoritmeLayer
is de invoer **vector**laagSize
is een numerieke parameter met een standaard waarde van 10Output
is de **vector**laag die zal worden gemaakt door het algoritmelibrary(sp)
laadt de bibliotheek spspatpoly = as(Layer, "Spatial")
vertaalt naar een sp objectRoep de functie
spsample
van de bibliotheeksp
aan en voer die uit met de hierboven gedefinieerde invoer (Layer
enSize
)Maak een object SpatialPointsDataFrame met de functie
SpatialPointsDataFrame
Maak de vector uitvoerlaag met de functie
st_as_sf
Dat is alles! Voer eenvoudigweg het algoritme uit met een vectorlaag die aanwezig is in de legenda van QGIS, kies het aantal willekeurige punten. De resulterende laag zal aan uw kaart worden toegevoegd.
28.4.4.2. Voorbeeld met uitvoer als raster
Het volgende script zal basis normale Kriging uitvoeren om een rasterkaart met geïnterpoleerde waarden te maken uit een gespecificeerd veld van de invoer punt vectorlaag door de functie autoKrige
te gebruiken van het pakket voor R automap
. Het zal eerst het model voor Kriging berekenen en dan een raster maken. Het raster wordt gemaakt met de functie aster
van het rasterpakket voor R:
##Basic statistics=group
##Layer=vector point
##Field=Field Layer
##Output=output raster
##load_vector_using_rgdal
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
Door ##load_vector_using_rgdal
te gebruiken zal de invoer vectorlaag beschikbaar worden gemaakt als een object SpatialDataFrame
, waarmee we vermijden dat het moet worden vertaald vanuit een object sf
.
28.4.4.3. Voorbeeld met uitvoer als tabel
Laten we het algoritme Summary Statistics
bewerken zodat de uitvoer een tabelbestand (csv) is.
De tekst vor het script is het volgende:
##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
De derde regel specificeert het Vector Field in invoer en de vierde regel vertelt het algoritme dat de uitvoer een tabel zou moeten zijn.
De laatste regel zal het object Stat
, gemaakt in het script, nemen en het naar een csv
-tabel converteren.
28.4.4.4. Voorbeeld met uitvoer naar het scherm
We kunnen het voorgaande voorbeeld gebruiken en in plaats van een tabel te maken, het resultaat afdrukken in Resultaten bekijken:
##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
Het script is exact hetzelfde als dat hierboven met slechts twee bewerkingen:
er wordt geen uitvoer gespecificeerd (de vierde regel is verwijderd)
de laatste regel begint met
>
wat Processing zegt om het object af te drukken in Identficatieresultaten
28.4.4.5. Voorbeeld met plot
Voor het maken van plots moet u de parameter ##output_plots_to_html
gebruiken, zoals in het volgende script:
##Basic statistics=group
##Layer=vector
##Field=Field Layer
##output_plots_to_html
####output_plots_to_html
qqnorm(Layer[[Field]])
qqline(Layer[[Field]])
Het script gebruikt een veld (Field
) van een vectorlaag (Layer
) als invoer en maakt een QQ Plot (om de normaliteit van de verdeling te testen).
Het plot wordt automatisch toegevoegd aan Resultaten bekijken van Processing.