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 |
campo |
Campo = Capa de campo |
nombre del campo seleccionado, p.ej. |
ráster |
Capa= raster |
Objeto RasterBrick, objeto predeterminado de paquete |
ráster múltiple |
Capa = ráster multiple |
Objetos RasterBrick, objeto predeterminado de paquete |
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: |
extensión |
E = extensión |
Extensión de objeto de paquete ráster, puede extraer valores con |
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):
Análisis de patrón de puntos es el grupo del algoritmo
Layer
es la capa vectorial entranteSize
es un parámetro numérico con un valor por defecto de 10Output
es la capa vectorial que creará el algoritmolibrary(sp)
carga la libreria spspatpoly = as(Layer, "Spatial")
traduce a un objeto spLlama a la función
spsample
de la libreríasp
y la ejecuta usando la entrada definida antes (Layer
ySize
)Crea un objeto SpatialPointsDataFrame usando la función
SpatialPointsDataFrame
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:
sin salida especificada (la cuarta línea ha sido eliminada)
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.