17.32. Syntaxis voor R in scripts voor Processing

Module bijgedragen door Matteo Ghetta - mogelijk gemaakt door Scuola Superiore Sant’Anna

Schrijven van scripts voor R in Processing kan behoorlijk ingewikkeld zijn vanwege de syntaxis die moet worden gebruikt.

Elk script begint met de Input en de Output voorafgegaan door ##.

17.32.1. Invoer

Vóórdat u de invoer specificeert kunt u de groep algoritmen instellen waarin u het script wilt plaatsen. Als de groep al bestaat zal het algoritme aan die groep worden toegevoegd, anders zal automatisch een nieuwe groep worden gemaakt:

  1. maken van een groep, ##My Group=group

Daarna dient u alle typen invoer te specificeren en eventueel de aanvullende parameters. U kunt verschillende invoer hebben:

  1. vector, ##Layer = vector
  2. vector Field, ##F = Field Layer (waar Layer de naam van de invoerlaag is)

  3. table, ##Layer = raster
  4. number, ##Num = number
  5. string, ##Str = string
  6. boolean, ##Bol = boolean

u kunt ook een keuzelijst hebben waarin alle parameters zijn opgenomen die u wilt, de items moeten zijn gecsheiden door puntkomma’s ;:

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

17.32.2. Uitvoer

Net als voor de invoer dient elke uitvoer te worden gedefinieerd aan het begin van het script:

  1. vector, ##output= output vector
  2. raster, ##output= output raster
  3. table, ##output= output table
  4. plots, ##showplots
  5. Uitvoer voor R in Resultaten bekijken, plaats eenvoudigweg binnen het script > vóór de uitvoer die u wilt weergeven

17.32.3. Tekst van het script

De tekst van het script volgt een syntaxis in de stijl van R en het paneel Log kan u helpen als er iets mis ging met uw script.

Onthoud dat in het script dat u heeft u alle aanvullende bibliotheken moet laden:

library(sp)

17.32.3.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
##Size=number 10
##Output= output vector
library(sp)
pts=spsample(Layer,Size,type="random")
Output=SpatialPointsDataFrame(pts, as.data.frame(pts))

en dan gaan we door de regels:

  1. Point pattern analysis is de groep van het algoritme

  2. Layer is de invoer **vector**laag

  3. Size is de numerieke parameter met een standaard waarde van 10

  4. Output is de **vector**laag die zal worden gemaakt door het algoritme

  5. library(sp) laadt de bibliotheek sp (die al op uw computer zou moeten zijn geïnstalleerd en welke installatie in R zou moeten zijn)

  6. roep de functie spsample aan van de bibliotheek sp en geef die door aan alle hierboven gedefinieerde invoer

  7. maak de vector uitvoer met de functie SpatialPointsDataFrame

Dat is alles! Voer eenvoudigweg het algoritme uit met een vectorlaag die aanwezig is in de legenda van QGIS, kies een getal voor de willekeurige punten en u zult ze in het kaartvenster van QGIS zien.

17.32.3.2. Voorbeeld met uitvoer als raster

Het volgende script zal een basale ordinary Kriging uitvoeren en zal een ratsrkaart maken van de geïnterpoleerde waarden:

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

vanuit een vector en het veld daarvan in invoer zal het algoritme de functie autoKrige van het R-pakket automap gebruiken en zal het eerst het model Kriging berekenen en dan een raster maken.

Het raster wordt gemaakt met de functie raster van het raster R-pakket.

17.32.3.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.

17.32.3.4. Voorbeeld met uitvoer naar het scherm

We kunnen het voorgaande voorbeeld nemen 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 hierboven met slechts 2 bewerkingen:

  1. er wordt geen uitvoer meer gespecificeerd (de vierde regel is verwijderd)

  2. de laatste regel begint met > wat Processing vertelt om het object af te drukken in Identficatieresultaten

17.32.3.5. Voorbeeld met plot

Het maken van plots is erg eenvoudig. U moet de parameter ##showplots gebruiken, zoals in het volgende script is weergegeven:

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

het script neemt een veld van de vectorlaag in invoer en maakt een QQ Plot om de normaliteit van de verdeling te testen.

Het plot wordt automatisch toegevoegd aan Resultaten bekijken van Processing.