Les données spatiales sp sont des objets de classe S4 et sont constituées de créneaux (appelés à l'aide de @) qui contiennent des composants de la classe d'entités spatiales représentée (par exemple, @data contient des attributs, @coords contient des paires de coordonnées, etc.). Vous pouvez renvoyer les noms d'emplacements de niveau supérieur à l'aide de slotNames (), mais il n'est pas récursif et ne renverra pas de noms d'emplacements imbriqués pour les objets de classe de polygones. Chaque emplacement peut contenir une classe d'objets différente et, avant de l'utiliser, doit être vérifié à l'aide de str () ou class (). L'emplacement @data est toujours un objet data.frame et @coords est une matrice tandis que @polygons est un objet liste avec des emplacements supplémentaires (labpt, area, hole, ringDir et coords).
Les emplacements disponibles et leur organisation dépendent du type de classe d'entités représenté. Les objets SpatialPointsDataFrame sont les plus basiques, tandis que les objets SpatialPolygonsDataFrame ont une imbrication (comme vu ci-dessus). Cette structure imbriquée, représentant chaque polygone, doit être prise en compte en utilisant quelque chose comme sapply pour opérer sur chaque objet de liste (polygone).
Voici un exemple qui utilise sapply pour renvoyer la zone pour chaque polygone en itérant à travers les "polygones" puis, le ou les emplacements "zone" imbriqués.
sapply(slot(sdat, 'polygons'), function(i) slot(i, 'area'))
Dans le cas des objets polygones, étant donné qu'ils sont stockés sous forme de liste pour chaque polygone, vous pouvez également utiliser l'indexation de liste. Voici un exemple pour renvoyer le premier polygone (résultant en un objet de classe "Polygon" et non SpatialPolygonsDataFrame):
sdat@polygons[[1]]
Dans les versions plus récentes de sp, les développeurs ont commencé, dans certains cas, à supprimer la nécessité d'appeler directement l'emplacement @data.
Par exemple, pour indexer @data vous avez précédemment:
sdat@data[sdat@data$att >= 0.5 ,]
et maintenant:
sdat[sdat$att >= 0.5 ,]
Cependant, comme indiqué précédemment, ce n'est pas le cas pour les autres créneaux (ex: coordonnées, polygones, etc ...). Quant à savoir quand utiliser [] ou $, cela dépend toujours du type d'opération. Les crochets "[]" peuvent être utilisés pour appeler un nom dans une trame de données mais sont principalement utilisés pour l'indexation tandis que $ est spécifiquement utilisé pour appeler une colonne dans une trame de données. La raison pour laquelle un appel "indirect" à un nom de colonne fonctionne, c'est que les développeurs ont ajouté des fonctionnalités pour permettre une recherche récursive à travers l'objet sp. Cependant, pour éviter les conflits de noms (comme dans votre exemple; avoir des colonnes x, y dans votre trame de données entrerait en conflit avec les noms x, y dans les noms de matrice @coord), il existe une vérification de cohérence interne qui explique pourquoi cela ne fonctionne que dans certains instances.
Une caractéristique pratique est que vous pouvez sous-définir un objet spatial via un index de ligne. Ici, je sous-ensemble les 10 premiers objets.
sub.sdat <- sdat[1:10,]
Ou, alternativement, un échantillon aléatoire (n = 10) utilisant un vecteur d'index de ligne.
rs.sdat <- sdat[sample(1:nrow(sdat), 10),]
Comprendre l'indexation et comment utiliser les crochets est une chose très importante pour écrire du code R.
Edit (24/03/2017): Veuillez noter que la classe d'entités simples (sf), suivant la norme GeoJSON, deviendra probablement la nouvelle norme pour les objets spatiaux en R. Vous pouvez lire une description détaillée de cette classe sur le CRAN sf site web simple Caractéristiques R .
R
syntaxe, elle n'est pas particulière ausp
package ou à ses objets.R
est installé avec un tutoriel: commencez là dans votre recherche. Le Web et la presse écrite offrent une multitude de ressources supplémentaires pour l'apprentissageR
.