Los datos espaciales sp son objetos de clase S4 y están formados por ranuras (llamadas usando @) que contienen componentes de la clase de entidad espacial que se está representando (por ejemplo, @data contiene atributos, @coords contienen pares de coordenadas, etc.). Puede devolver los nombres de las ranuras de nivel superior utilizando slotNames (), pero no es recursivo y no devolverá nombres de ranuras anidadas para objetos de clase de polígono. Cada ranura puede contener una clase de objeto diferente y, antes de operar en ella, debe verificarse usando str () o class (). La ranura @data siempre es un objeto data.frame y @coords es una matriz, mientras que @polygons es un objeto de lista con ranuras adicionales (labpt, area, hole, ringDir y coords).
Los espacios disponibles y la organización de ellos dependen del tipo de clase de entidad que se represente. Los objetos SpatialPointsDataFrame son los más básicos, mientras que los objetos SpatialPolygonsDataFrame tienen anidamiento (como se ve arriba). Esta estructura anidada, que representa cada polígono, debe tenerse en cuenta utilizando algo como sapply para operar en cada objeto de lista (polígono).
Aquí hay un ejemplo que usa sapply para devolver el área de cada polígono iterando a través de los "polígonos" y luego las ranuras anidadas de "área".
sapply(slot(sdat, 'polygons'), function(i) slot(i, 'area'))
En el caso de los objetos poligonales, dado que se almacenan como una lista para cada polígono, también puede usar la indexación de listas. Aquí hay un ejemplo para devolver el primer polígono (que da como resultado un objeto de clase "Polígono" y no SpatialPolygonsDataFrame):
sdat@polygons[[1]]
En versiones más recientes de sp, los desarrolladores han comenzado, en algunos casos, a eliminar la necesidad de llamar directamente a la ranura @data.
Por ejemplo, para indexar @data anteriormente:
sdat@data[sdat@data$att >= 0.5 ,]
y ahora:
sdat[sdat$att >= 0.5 ,]
Sin embargo, como se indicó anteriormente, este no es el caso para las otras ranuras (por ejemplo, coordenadas, polígonos, etc.). En cuanto a cuándo usar [] o $, esto todavía depende del tipo de operación. Los corchetes "[]" se pueden usar para llamar a un nombre en un marco de datos, pero se usan principalmente para indexar, mientras que $ se usa específicamente para llamar a una columna en un marco de datos. La razón por la que una llamada "indirecta" a un nombre de columna funciona es que los desarrolladores han agregado funcionalidad para permitir una búsqueda recursiva a través del objeto sp. Sin embargo, para evitar conflictos de nombres (como en su ejemplo; tener columnas x, y en su marco de datos entraría en conflicto con los nombres x, y en los nombres de la matriz @coord) hay alguna comprobación de consistencia interna que explica por qué esto solo funciona en algunos instancias.
Una característica conveniente es que puede subconjugar un objeto espacial a través de un índice de fila. Aquí estoy subconjustando los primeros 10 objetos.
sub.sdat <- sdat[1:10,]
O, alternativamente, una muestra aleatoria (n = 10) usando un vector de índice de fila.
rs.sdat <- sdat[sample(1:nrow(sdat), 10),]
Comprender la indexación y cómo usar corchetes es algo muy importante al escribir código R.
Editar (24/03/2017): Tenga en cuenta que la clase de entidad simple (sf), siguiendo el estándar GeoJSON, probablemente se convertirá en el nuevo estándar para objetos espaciales en R. Puede leer una descripción detallada de esta clase en el CRAN sf página web simple Características de R .
R
sintaxis, no es particular delsp
paquete o sus objetos.R
se instala con un tutorial: comience allí en su investigación. La Web y los medios impresos ofrecen una gran cantidad de recursos adicionales para el aprendizajeR
.