17.33. Scripts van R gebruiken in Processing

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

Processing (met de plug-in Processing R Provider) maakt het mogelijk scripts voor R te schrijven en uit te voeren binnen QGIS.

Waarschuwing

R moet zijn geïnstalleerd op uw computer en het PATH moet correct zijn ingesteld. Meer nog, Processing roept eenvoudigweg de externe pakketten van R aan, het kan ze niet installeren. Zorg er dus voor de externe pakketten direct in R te installeren. Bekijk het gerelateerde hoofdstuk in de gebruikershandleiding.

Notitie

Als u problemen met pakketten heeft, zijn die misschien gerelateerd aan ontbrekende voorgeschreven pakketten die zijn vereist door Processing, zoals sp, rgdal en raster.

17.33.1. Scripts toevoegen

Toevoegen van een script is eenvoudig. De gemakkelijkste manier is om de Toolbox van Processing te openen en te kiezen voor Create new R script… uit het menu R (gelabeld met een pictogram R) aan de bovenzijde van de Toolbox van Processing. U kunt bijvoorbeeld ook het script maken in een tekstbewerker en het opslaan in uw map voor R-scripts (processing/rscripts). Als het daar werd opgeslagen, zal het beschikbaar zijn voor bewerken door met rechts te klikken op de naam van het script in de Toolbox van Processing en dan te kiezen Script bewerken…).

../../../_images/r_intro_1.png

Notitie

Indien u R niet ziet in Processing, dient u het te activeren via Processing ► Opties ► Providers

Het opent een venster voor bewerken van scripts waarin u enkele parameters moet specificeren vóórdat u de tekst va het script kunt toevoegen.

../../../_images/r_intro_2.png

17.33.2. Plots maken

In deze handleiding gaan we een boxplot maken van een veld van een vectorlaag.

Open het project van QGIS r_intro.qgs in de map exercise_data/processing/r_intro/.

17.33.2.1. Parameters voor scripts

Open de bewerker en begin met het schrijven aan het begin ervan.

U moet enkele parameters specificeren vóór de tekst van het script:

  1. De naam van de groep (plots in dit geval) waarin u uw script wilt plaatsen (als de groep niet bestaat, zal die worden gemaakt):

    ##plots=group
    

    U zult uw script terugvinden in de R groep plots in de Toolbox van Processing.

  2. U moet Processing vertellen dat u een plot wilt weergeven (voor dit voorbeeld):

    ##showplots
    

    U zult dan een koppeling vinden naar het plot in het paneel Resultaten bekijken (kan worden in- / uitgeschakeld in Beeld ► Panelen en met Processing ► Resultaten bekijken).

  3. U dient Processing ook over uw invoergegevens te vertellen. In dit voorbeeld willen we een plot maken uit een veld van een vectorlaag:

    ##Layer=vector
    

    Processing weet nu dat de invoer een vector is. De naam Laag is niet belangrijk, wat van belang is is de parameter vector.

  4. Tenslotte moet u het invoerveld van de vectorlaag specificeren (gebruik de naam die u hierboven opgaf - Laag):

    ##X=Field Layer
    

    Processing weet nu dat u een veld Laag nodig hebt, en dat u het X wilt noemen.

  5. Het is ook mogelijk de naam van uw script te definiëren met name:

    ##My box plot script=name
    

    Indien niet gedefinieerd zal de naam van het bestand worden gebruikt als de naam van het script.

17.33.2.2. Tekst van het script

Nu u de kop van het script heeft ingesteld kunt u de functie toevoegen:

boxplot(Layer[[X]])

boxplot is de naam van de functie van R, de parameter Laag is de naam die u hebt gedefinieerd voor de gegevensset voor de invoer en X is de naam die u hebt gedefinieerd voor het veld van die gegevensset.

Waarschuwing

De parameter X moet binnen dubbele vierkante haken staan ([[]]).

Het uiteindelijke script ziet er als volgt uit:

##Vector processing=group
##showplots
##Layer=vector
##X=Field Layer
boxplot(Layer[[X]])
../../../_images/r_intro_3.png

Sla het script op in het standaard pad dat wordt voorgesteld door Processing (processing/rscripts). Als u geen name hebt gedefinieerd in de kop van het script, zal de bestandsnaam die u kiest de naam van het script worden in de Toolbox van Processing.

Notitie

U kunt het script opslaan in waar u maar wilt, maar Processing is dan niet in staat om ze automatisch op te nemen in de Toolbox van Processing, dus dient u het handmatig te uploaden.

Voer het nu eenvoudigweg uit met behulp van de knop aan de bovenzijde van het venster van de bewerker:

../../../_images/r_intro_4.png

Gebruik, als het venster van de bewerker eenmaal is gesloten, het tekstvak van Processing om uw script te zoeken:

../../../_images/r_intro_5.png

U kunt nu de vereiste parameters invoeren in het venster Algoritme van Processing:

  • voor Laag kies sample_points

  • voor het veld X kies value

Klik op Run.

../../../_images/r_intro_6.png

Het venster Resultaten zou automatisch moeten worden geopend, indien niet, klik eenvoudigweg op Processing ► Resultaten bekijken….

Klik op de koppeling in Resultaten bekijken en u zult zien:

../../../_images/r_intro_7.png

Notitie

U kunt de afbeelding openen, kopiëren en opslaan door met rechts te klikken op het plot.

17.33.3. Een vector maken

U kunt ook een vectorlaag maken en die automatisch laden in QGIS.

Het volgende voorbeeld is afkomstig uit het script Random sampling grid dat te vinden is in de online collectie van R-scripts (de scripts in deze online collectie zijn te vinden op https://github.com/qgis/QGIS-Processing/tree/master/rscripts).

Het doel van deze oefening is om een willekeurige punten vectorlaag te maken met een invoer vectorlaag om het bereik te beperken met behulp van de functie spsample van het pakket sp.

17.33.3.1. Parameters voor scripts

Net als eerder moeten we, vóór de tekst van het script, enkele parameters instellen:

  1. Specificeer de naam van de groep waarin u uw script wilt opslaan, in dit geval Point pattern analysis:

    ##Point pattern analysis=group
    
  2. Definieer een invoerparameter (een vectorlaag) die de plaatsing van de willekeurige punten zal beperken:

    ##Layer=vector
    
  3. Stel een invoerparameter in voor het aantal punten dat moet worden gemaakt (Size, met een standaardwaarde 10):

    ##Size=number 10
    

    Notitie

    Omdat een standaardwaarde (10) is gedefinieerd, kan de gebruiker dit aantal wijzigen of de parameter zonder een getal kan laten.

  4. Specificeer dat er een uitvoer vectorlaag is (genaamd Output):

    ##Output=output vector
    

17.33.3.2. Tekst van het script

Nu kunt u de tekst van de functie toevoegen:

  1. Gebruik de functie spsample:

    pts=spsample(Layer, Size, type="random")
    

    De functie gebruikt de Laag om de plaatsing van de punten te beperken (als het een lijnlaag is, moet een punt op een van de lijnen in de laag liggen, als het een polygoonlaag is, moet ene punt binnen een polygoon liggen). Het aantal punten wordt genomen uit de parameter Size. De methode van samplen is willekeurig.

  2. Genereer de uitvoer (de parameter Output):

    Output=SpatialPointsDataFrame(pts, as.data.frame(pts))
    

Het uiteindelijke script ziet er als volgt uit:

##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))
../../../_images/r_intro_8.png

Sla het op en voer het uit door te klikken op de knop Script uitvoeren.

Typ in het nieuwe venster de juiste parameters in:

../../../_images/r_intro_9.png

en klik op Run.

De laag met resultaten zal worden toegevoegd aan de inhoudsopgave en de punten ervan zullen worden weergegeven in het kaartvenster:

../../../_images/r_intro_10.png

17.33.4. Tekst en grafische uitvoer vanuit R - syntaxis

Processing (met de plug-in Processing R Provider) gebruikt speciale syntaxis om de resultaten uit R te verkrijgen:

  • > vóór uw opdracht, zoals in >lillie.test(Layer[[Field]]) betekent dat het resultaat moet worden verzonden naar uitvoer voor R (Resultaten bekijken)

  • + na een plot schakelt overliggende plots in. Bijvoorbeeld plot(Layer[[X]], Layer[[Y]]) + abline(h=mean(Layer[[X]]))