Räumliche sp-Daten sind S4-Klassenobjekte und bestehen aus Slots (mit @ bezeichnet), die Komponenten der dargestellten räumlichen Feature-Class enthalten (z. B. @data enthält Attribute, @coords enthält Koordinatenpaare usw.). Sie können die Steckplatznamen der obersten Ebene mit slotNames () zurückgeben, dies ist jedoch nicht rekursiv und es werden keine verschachtelten Steckplatznamen für Polygonklassenobjekte zurückgegeben. Jeder Slot kann eine andere Objektklasse enthalten und sollte vor der Bearbeitung mit str () oder class () überprüft werden. Der Slot @data ist immer ein data.frame-Objekt und @coords ist eine Matrix, während @polygons ein Listenobjekt mit zusätzlichen Slots ist (labpt, area, hole, ringDir und coords).
Die verfügbaren Slots und ihre Organisation hängen davon ab, welcher Typ von Feature-Class dargestellt wird. SpatialPointsDataFrame-Objekte sind die grundlegendsten Objekte, wohingegen SpatialPolygonsDataFrame-Objekte (wie oben gezeigt) verschachtelt sind. Bei dieser verschachtelten Struktur, die jedes Polygon darstellt, muss berücksichtigt werden, dass für jedes Listenobjekt (Polygon) so etwas wie sapply verwendet wird.
In diesem Beispiel wird sapply verwendet, um die Fläche für jedes Polygon durch Iteration durch die "Polygone" und dann durch die verschachtelten "Flächen" -Slots zurückzugeben.
sapply(slot(sdat, 'polygons'), function(i) slot(i, 'area'))
Bei Polygonobjekten können Sie alternativ die Listenindizierung verwenden, da sie als Liste für jedes Polygon gespeichert werden. Im folgenden Beispiel wird das erste Polygon zurückgegeben (was zu einem Klassenobjekt "Polygon" und nicht zu SpatialPolygonsDataFrame führt):
sdat@polygons[[1]]
In neueren Versionen von sp haben die Entwickler in einigen Fällen damit begonnen, den @ data-Slot nicht mehr direkt aufzurufen.
Zum Beispiel, um @data zu indizieren:
sdat@data[sdat@data$att >= 0.5 ,]
und nun:
sdat[sdat$att >= 0.5 ,]
Wie bereits erwähnt, gilt dies jedoch nicht für die anderen Slots (z. B. Koordinaten, Polygone usw.). Wann [] oder $ verwendet werden, hängt immer noch von der Art der Operation ab. Klammern "[]" können zum Aufrufen eines Namens in einem Datenrahmen verwendet werden, werden jedoch hauptsächlich zum Indizieren verwendet, wohingegen $ speziell zum Aufrufen einer Spalte in einem Datenrahmen verwendet wird. Der Grund, warum ein "indirekter" Aufruf eines Spaltennamens funktioniert, besteht darin, dass die Entwickler Funktionen hinzugefügt haben, die eine rekursive Suche durch das sp-Objekt ermöglichen. Um jedoch Namenskonflikte zu vermeiden (wie in Ihrem Beispiel, wenn x-, y-Spalten in Ihrem Datenrahmen in Konflikt mit den x-, y-Namen in den @ coord-Matrixnamen stehen würden), wird eine interne Konsistenzprüfung durchgeführt, die erklärt, warum dies nur in einigen Fällen funktioniert Instanzen.
Ein praktisches Merkmal ist, dass Sie ein räumliches Objekt über einen Zeilenindex unterteilen können. Hier setze ich die ersten 10 Objekte unter.
sub.sdat <- sdat[1:10,]
Oder alternativ eine Zufallsstichprobe (n = 10) unter Verwendung eines Zeilenindexvektors.
rs.sdat <- sdat[sample(1:nrow(sdat), 10),]
Das Verständnis der Indizierung und der Verwendung von Klammern ist beim Schreiben von R-Code von großer Bedeutung.
Bearbeiten (24.03.2017): Bitte beachten Sie, dass die einfache Feature-Class (sf) nach dem GeoJSON-Standard wahrscheinlich der neue Standard für räumliche Objekte in R wird. Eine ausführliche Beschreibung dieser Klasse finden Sie im CRAN sf Website Einfache Funktionen für R .
R
Syntax handelt, sind weder dassp
Paket noch seine Objekte betroffen.R
wird mit einem Tutorial installiert: Beginnen Sie dort mit Ihrer Recherche. Das Web und die Printmedien bieten eine Fülle zusätzlicher LernressourcenR
.