Viktigt

Översättning är en gemenskapsinsats du kan gå med i. Den här sidan är för närvarande översatt till 100.00%.

17.33. Använda R-skript i Processing

Modulen har skapats av Matteo Ghetta - finansierad av Scuola Superiore Sant’Anna

Processing (med insticksprogrammet Processing R Provider) gör det möjligt att skriva och köra R-skript i QGIS.

Varning

R måste vara installerat på din dator och PATH måste vara korrekt inställt. Dessutom anropar Processing bara de externa R-paketen, det kan inte installera dem. Se därför till att installera externa paket direkt i R. Se relaterad kapitel i användarhandboken.

Observera

Om du har problem med paket kan det bero på att du saknar obligatoriska paket som krävs av Processing, t.ex. sp, rgdal och raster.

17.33.1. Lägga till skript

Att lägga till ett skript är enkelt. Det enklaste sättet är att öppna verktygslådan Processing och välja Create new R script… från R-menyn (märkt med en R-ikon) högst upp i verktygslådan Processing. Du kan också skapa skriptet i t.ex. en textredigerare och spara det i din R-skriptmapp (processing/rscripts). När det har sparats där kommer det att vara tillgängligt för redigering genom att högerklicka på skriptnamnet i verktygslådan för bearbetning och sedan välja Edit Script…).

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

Observera

Om du inte kan se R i Processing måste du aktivera det i Processing ► Options ► Providers

Det öppnar ett skriptredigeringsfönster där du måste ange några parametrar innan du kan lägga till skriptdelen.

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

17.33.2. Skapa tomter

I den här handledningen ska vi skapa en boxplot av ett vektorlagerfält.

Öppna QGIS-projektet r_intro.qgs under mappen exercise_data/processing/r_intro/.

Parametrar för skript

Öppna redigeringsprogrammet och börja skriva i början av det.

Du måste ange vissa parametrar före skriptets huvuddel:

  1. Namnet på den grupp (plots i detta fall) där du vill placera ditt skript (om gruppen inte finns kommer den att skapas):

    ##plots=group
    

    Du hittar ditt skript i R-gruppen plots i verktygslådan Processing.

  2. Du måste tala om för Processing att du vill visa ett diagram (i det här exemplet):

    ##showplots
    

    Du hittar sedan en länk till diagrammet i Result Viewer-panelen (kan slås på / av i View ► Panels och med Processing ► Results Viewer).

  3. Du måste också berätta för Processing om dina indata. I det här exemplet vill vi skapa en plott från ett fält i ett vektorlager:

    ##Layer=vector
    

    Processing vet nu att indata är en vektor. Namnet Layer är inte viktigt, det som betyder något är parametern vector.

  4. Slutligen måste du ange indatafältet för vektorlagret (med det namn du angav ovan - Lager):

    ##X=Field Layer
    

    Processing vet nu att du behöver ett fält av typen Layer och att du ska kalla det X.

  5. Det är också möjligt att definiera namnet på ditt skript med hjälp av name:

    ##My box plot script=name
    

    Om det inte definieras kommer filnamnet att användas som namn på skriptet.

Skriptets kropp

Nu när du har skapat huvudet i skriptet kan du lägga till funktionen:

boxplot(Layer[[X]])

boxplot är namnet på R-funktionen, parametern Layer är det namn som du har definierat för indatadatasetet och X är det namn som du har definierat för fältet i det datasetet.

Varning

Parametern X måste stå inom dubbla hakparenteser ([[]]).

Det slutliga skriptet ser ut så här:

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

Spara skriptet i den standardsökväg som föreslås av Processing (processing/rscripts). Om du inte har definierat ett namn i skriptets rubrik kommer det filnamn du väljer att bli namnet på skriptet i verktygslådan Processing.

Observera

Du kan spara skriptet var du vill, men Processing kommer då inte att kunna inkludera det i verktygslådan för bearbetning automatiskt, så du måste ladda upp det manuellt.

Nu är det bara att köra den med hjälp av knappen längst upp i redigeringsfönstret:

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

När redigeringsfönstret har stängts kan du använda textrutan i Processing för att hitta ditt skript:

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

Du kan nu fylla i de parametrar som krävs i fönstret Processing algorithm:

  • för Layer välj sample_points

  • för fältet X välj värde

Klicka på Kör.

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

Fönstret Result bör öppnas automatiskt, om inte, klicka bara på Processing ► Result Viewer….

Klicka på länken i visaren så kommer du att se:

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

Observera

Du kan öppna, kopiera och spara bilden genom att högerklicka på plotten.

17.33.3. Skapa en vektor

Du kan också skapa ett vektorlager och få det automatiskt inläst i QGIS.

Följande exempel har hämtats från skriptet Random sampling grid som finns i online-samlingen av R-skript (skripten i denna online-samling finns på https://github.com/qgis/QGIS-Processing/tree/master/rscripts).

Syftet med denna övning är att skapa ett slumpmässigt punktvektorlager med hjälp av ett ingångsvektorlager för att begränsa omfattningen med hjälp av funktionen spsample i paketet sp.

Parametrar för skript

Som tidigare måste vi ställa in några parametrar innan skriptet börjar:

  1. Ange namnet på den grupp där du vill placera ditt skript, i det här fallet Point pattern analysis:

    ##Point pattern analysis=group
    
  2. Definiera en inmatningsparameter (ett vektorlager) som begränsar placeringen av de slumpmässiga punkterna:

    ##Layer=vector
    
  3. Ange en inmatningsparameter för antalet punkter som ska skapas (Size, med ett standardvärde på 10):

    ##Size=number 10
    

    Observera

    Eftersom ett standardvärde (10) har definierats kan användaren ändra detta tal eller lämna parametern utan tal.

  4. Ange att det finns ett utmatningsvektorlager (kallat Output):

    ##Output=output vector
    

Skriptets kropp

Nu kan du lägga till funktionens huvuddel:

  1. Använd funktionen spsample:

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

    Funktionen använder Layer för att begränsa punkternas placering (om det är ett linjelager måste en punkt ligga på en av linjerna i lagret, om det är ett polygonlager måste en punkt ligga inom en polygon). Antalet punkter hämtas från parametern Size. Provtagningsmetoden är slumpmässig.

  2. Generera utdata (parametern Output):

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

Det slutliga skriptet ser ut så här:

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

Spara den och kör den genom att klicka på körknappen.

I det nya fönstret skriver du in rätt parametrar:

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

och klicka på Kör.

Resultatlagret läggs till i innehållsförteckningen och dess punkter visas på kartbilden:

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

17.33.4. Text- och grafutmatning från R - syntax

Processing (med plugin-programmet Processing R Provider) använder speciell syntax för att få ut resultaten från R:

  • > före ditt kommando, som i >lillie.test(Layer[[Field]]) betyder att resultatet ska skickas till R-utdata (Result viewer)

  • + efter en plott aktiverar överlagrade plottar. Till exempel plot(Lager[[X]], Lager[[Y]]) + abline(h=medelvärde(Lager[[X]]))