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

Scripts van R gebruiken in Processing

Module contributed by Matteo Ghetta - Dropcode

Processing maakt het mogelijk scripts voor R te schrijven en uit te voeren binnen QGIS.

Waarschuwing

R has to be installed on your computer and the PATH has to correctly set up. Moreover Processing just calls the external R packages, it is not able to install them. So be sure to install external packages directly in R. See the related chapter in the training manual.

Notitie

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

Scripts toevoegen

Toevoegen van een script is erg eenvoudig. Open de Toolbox van Processing en klik eenvoudigweg op R ‣ Gereedschap ‣ Nieuw R script maken.

../../../_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

Plots maken

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

Open het project van QGIS r_intro.qps.

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 waarin u uw script wilt plaatsen:

    ##plots=group
    

zo zult u uw script terugvinden in de groep plots in de Toolbox van Processing.

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

    ##showplots
    

op deze manier zult het plot zien in de Resultaten viewer van Processing.

  1. U dient Processing ook te vertellen met welke soort gegevens u werkt. 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.

  1. Tenslotte moet u het invoerveld van de vectorlaag specificeren die u wilt plotten:

    ##X=Field Layer
    

Zo weet Processing dat u X de Veldlaag heeft genoemd.

Tekst van het script

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

boxplot(Layer[[X]])

Onthoud dat boxplot de naam van de functie van R zelf is die Laag aanroept als gegevensset en X als veld voor de gegevensset.

Waarschuwing

De parameter X staat binnen dubbele vierkante haken [[]]

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. De naam die u kiest zal hetzelfde zijn als de naam van het script dat u terugvindt in de Toolbox van Processing.

Notitie

U kunt het script opslaan in ene ander pad, maar Processing is dan niet in staat om ze automatisch te uploaden en dient u alle scripts 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 anders, 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:

  • kies als Laag de sample points

  • vul het veld X met de parameter 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....

Dit is het uiteindelijke resultaat dat 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

Een vector maken

Met een script in R kunt u ook een vector maken en die automatisch laden in QGIS.

Het volgende voorbeeld komt uit het script Random sampling grid dat u kunt downloaden vanuit de verzameling online R ‣ Tools ‣ Download R scripts from the on-line collection.

The aim of this exercise is to crate a random point vector in a layer extent using the spsample function of the sp package.

Parameters voor scripts

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

  1. specify the the name of the group in which you want to put your script, for example Point pattern analysis:

    ##Point pattern analysis=group
    
  2. stel de laag in die de willekeurige punten zal bevatten:

    ##Layer=vector
    
  3. stel het aantal punten in dat moet worden gemaakt:

    ##Size=number 10
    

Notitie

10 zal de standaard waarde zijn. U kunt dit getal wijzigen of u kunt de parameter zonder standaard nummer laten

  1. specificeer dat de uitvoer een vectorlaag is:

    ##Output= output vector
    

Tekst van het script

Nu kunt u de tekst van de functie toevoegen:

  1. voer de functie spsample uit:

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

this way the function takes the extent of the Layer, the number of points is taken from the Size parameter and the type po point generation is random

  1. Schrijf de regel die de parameters voor de uitvoer bevat:

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

Het uiteindelijke script zou er als volgt uit moeten zien:

../../../_images/r_intro_8.png

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

Typ in het nieuwe venster de juiste parameters in:

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

en klik op Run.

De resulterende punten zullen wordne weergegeven in het kaartvenster

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

R - Processing syntaxis

Onthoud dat Processing soms speciale syntaxis gebruikt om de resultaten uit R te verkrijgen:

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

  • + na een plot om overliggende plots aan te roepen. Bijvoorbeeld plot(Layer[[X]], Layer[[Y]]) + abline(h=mean(Layer[[X]]))