28.4. Apéndice D: sintaxis del script QGIS R

Contribución de Matteo Ghetta - financiado por Scuola Superiore Sant’Anna

Escribir scripts R en Procesos es un poco complicado debido a la sintaxis especial.

Un script Processing R comienza con la definición de sus Entradas y Salidas, cada una precedida por caracteres de doble hash (##).

Antes de las entradas, se puede especificar el grupo en el que colocar el algoritmo. Si el grupo ya existe, se le agregará el algoritmo; de lo contrario, se creará el grupo. En el siguiente ejemplo, el nombre del grupo es Mi grupo:

##My Group=group

28.4.1. Entradas

Deben especificarse todos los datos de entrada y los parámetros. Hay varios tipos de entradas:

  • vectorial: ##Layer = vector

  • campo vectorial: ##F = Field Layer (donde Layer es el nombre de una capa vectorial entrante a la que pertenece el campo)

  • ráster: ##r = raster

  • tabla: ##t = table

  • número: ##Num = number

  • cadena: ##Str = string

  • booleano: ##Bol = boolean

  • elementos en un menú desplegable. Los elementos deben estar separados por punto y coma. ;: ##type=selection point;lines;point+lines

28.4.2. Salidas

Igual que para las entradas, cada salida se tiene que definir al principio del script:

  • vectorial: ##output= output vector

  • ráster: ##output= output raster

  • tabla: ##output= output table

  • gráficos: ##output_plots_to_html (##showplots en versiones anteriores)

  • Para mostrar la salida de R en el Visor de resultados, coloque > delante del comando cuya salida le gustaría mostrar.

28.4.3. Resumen de sintaxis para scripts QGIS R

Se ofrecen varios tipos de parámetros de entrada y salida.

28.4.3.1. Tipos de parámetros de entrada

Parámetros

Ejemplos de sintaxis

Devolviendo objetos

Vector

Capa = vector

objeto sf (u objeto SpatialDataFrame, si se ha especificado ##load_vector_using_rgdal)

punto vector

Capa = vectorial de puntos

objeto sf (u objeto SpatialDataFrame, si se ha especificado ##load_vector_using_rgdal)

Vectorial lineal

Capa = vectorial lineal

objeto sf (u objeto SpatialDataFrame, si se ha especificado ##load_vector_using_rgdal)

polígono vector

Capa = vectorial poligonal

sf object (o SpatialPolygonsDataFrame object, si se usa ##load_vector_using_rgdal)

multiple vector

Capa = vectorial múltiple

sf object (u objetos SpatialDataFrame si se especifica ##load_vector_using_rgdal)

tabla

Capa = tabla

conversión de dataframe desde csv, objeto predeterminado de la función read.csv

campo

Campo = Capa de campo

nombre del campo seleccionado, p.ej. "Area"

ráster

Capa= raster

Objeto RasterBrick, objeto predeterminado de paquete ráster

ráster múltiple

Capa = ráster multiple

Objetos RasterBrick, objeto predeterminado de paquete ráster

número

N = número

número entero o flotante elegido

cadena

S = Cadena

cadena agregada en el cuadro

longstring

LS = longstring

cadena agregada en el cuadro, podría ser más larga que la cadena normal

selección

S = selección primera;segunda;tercera

cadena del elemento seleccionado elegido en el menú desplegable

src

C = src

cadena del CRS resultante elegido, en el formato: "EPSG:4326"

extensión

E = extensión

Extensión de objeto de paquete ráster, puede extraer valores con E@xmin

punto

P = punto

Al hacer click en el mapa, tiene las coordenadas del punto

archivo

F = archivo

ruta del archivo elegido, p. ej. «/home/matteo/file.txt»

carpeta

F = carpeta

ruta del directorio elegido, p. ej. «/home/matteo/Downloads»

Un parámetro puede ser OPCIONAL, lo que significa que puede ser ignorado.

Con el fin de establecer una entrada como opcional, puede añadir la cadena optional antes de la entrada, p.ej.:

##Layer = vector
##Field1 = Field Layer
##Field2 = optional Field Layer

28.4.3.2. Tipos de parámetros de salida

Parámetros

Ejemplos de sintaxis

Vector

Salida = vector de salida

ráster

Salida = salida de ráster

tabla

Salida = tabla de salida

archivo

Salida = archivo de salida

Nota

Puedes grabar gráficos como png desde el Visor de Resultados de Procesos, o puedes escoger guardar el gráfico directamente desde la interfaz del algoritmo.

28.4.3.3. Cuerpo de lineas de codigo

El cuerpo del script sigue la sintaxis de R y el panel de Registro puede ayudarte si hay algo mal en tu script.

Recuerda que tienes que cargar todas las librerías adicionales en el script:

library(sp)

28.4.4. Ejemplos

28.4.4.1. Ejemplo con salida vectorial

Tomemos un algoritmo de la colección en línea que crea puntos aleatorios a partir de la extensión de una capa de entrada:

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

Explicación (por línea en el script):

  1. Análisis de patrón de puntos es el grupo del algoritmo

  2. Layer es la capa vectorial entrante

  3. Size es un parámetro numérico con un valor por defecto de 10

  4. Output es la capa vectorial que creará el algoritmo

  5. library(sp) carga la libreria sp

  6. spatpoly = as(Layer, "Spatial") traduce a un objeto sp

  7. Llama a la función spsample de la librería sp y la ejecuta usando la entrada definida antes (Layer y Size)

  8. Crea un objeto SpatialPointsDataFrame usando la función SpatialPointsDataFrame

  9. Crear la capa vectorial saliente usando la función st_as_sf

¡Eso es! Simplemente ejecute el algoritmo con una capa vectorial que tenga en la leyenda de QGIS, elija el número de puntos aleatorios. La capa resultante se agregará a su mapa.

28.4.4.2. Ejemplo con salida ráster

El siguiente script ejecutará un kriging ordinario básico para crear un mapa ráster de valores interpolados a partir de un campo específico de la capa vectorial de puntos de entrada usando la función autoKrige del paquete R automap. Primero calculará el modelo kriging y luego creará un ráster. El ráster se crea con la función ráster del paquete Ráster 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

Usando ##load_vector_using_rgdal, la capa vectorial entrante estará disponible como objetos SpatialDataFrame, por lo que evitamos tener que traducirlo desde un objeto sf.

28.4.4.3. Ejemplo con salida de tabla

Editemos el algoritmo de Estadísticas de resumen para que la salida sea un archivo de tabla (csv).

El cuerpo del script es el siguiente:

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

La tercera línea especifica la Campo Vectorial en la entrada y la cuarta línea le dice al algoritmo que la salida debe ser una tabla.

La última línea tomará el objeto Stat creado en el script y lo convierte en una tabla csv.

28.4.4.4. Ejemplo con la consola de salida

Podemos usar el ejemplo anterior y en lugar de crear una tabla, imprimir el resultado en el Visor de resultados:

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

El script es exactamente el mismo que el de arriba excepto por dos ediciones:

  1. sin salida especificada (la cuarta línea ha sido eliminada)

  2. la última línea comienza con >, indicando a Processing que haga que el objeto esté disponible a través del visor de resultados

28.4.4.5. Ejemplo con gráfico

Para crear gráficos, debe usar el parámetro ##output_plots_to_html como en el siguiente script:

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

El script usa un campo (Field) de una capa vectorial (Layer) como entrada y crea un Gráfico QQ (para probar la normalidad de la distribución).

El gráfico se agrega automáticamente al Visor de resultados de procesos.