Przestrzenne dane sp są obiektami klasy S4 i składają się ze szczelin (nazywanych za pomocą @), które zawierają komponenty reprezentowanej klasy cech przestrzennych (np. @Data zawiera atrybuty, @coords zawierają pary współrzędnych itp.). Możesz zwrócić nazwy gniazd najwyższego poziomu za pomocą slotNames (), ale nie są one rekurencyjne i nie zwrócą nazw zagnieżdżonych obiektów klasy wieloboków. Każdy slot może zawierać inną klasę obiektów i przed użyciem na nim powinien zostać sprawdzony za pomocą str () lub class (). Szczelina @data jest zawsze obiektem data.frame, a @coords jest matrycą, podczas gdy @polygons to obiekt listy z dodatkowymi szczelinami (labpt, area, hole, ringDir i coords).
Dostępne miejsca i ich organizacja zależy od rodzaju reprezentowanej klasy obiektów. Obiekty SpatialPointsDataFrame są najbardziej podstawowe, podczas gdy obiekty SpatialPolygonsDataFrame mają zagnieżdżanie (jak pokazano powyżej). Ta zagnieżdżona struktura, reprezentująca każdy wielokąt, musi zostać rozliczona z użycia czegoś podobnego do sapply do obsługi każdego obiektu listy (wielokąta).
Oto przykład, który używa sapply do zwrócenia obszaru dla każdego wielokąta poprzez iterację przez „wielokąty”, a następnie zagnieżdżone „obszary” obszaru.
sapply(slot(sdat, 'polygons'), function(i) slot(i, 'area'))
W przypadku obiektów wielokątów, ponieważ są one przechowywane jako lista dla każdego wielokąta, można alternatywnie użyć indeksowania listy. Oto przykład, aby zwrócić pierwszy wielokąt (w wyniku czego powstaje obiekt klasy „Polygon”, a nie SpatialPolygonsDataFrame):
sdat@polygons[[1]]
W nowszych wersjach SP programiści zaczęli w niektórych przypadkach eliminować konieczność bezpośredniego wywoływania slotu @data.
Na przykład, aby zindeksować @ dane, wcześniej:
sdat@data[sdat@data$att >= 0.5 ,]
i teraz:
sdat[sdat$att >= 0.5 ,]
Jednak, jak wskazano wcześniej, nie dotyczy to innych szczelin (np. Współrzędnych, wielokątów itp.). Jeśli chodzi o to, kiedy użyć [] lub $, to wciąż zależy od rodzaju operacji. Nawiasów „[]” można używać do wywoływania nazwy w ramce danych, ale są one przede wszystkim używane do indeksowania, natomiast $ służy do wywoływania kolumny w ramce danych. Powodem, dla którego działa „pośrednie” wywołanie nazwy kolumny, jest to, że programiści dodali funkcjonalność, która umożliwia rekurencyjne przeszukiwanie obiektu sp. Jednak, aby uniknąć konfliktów nazw (jak w twoim przykładzie; posiadanie kolumn x, y w ramce danych powodowałoby konflikt z nazwami x, y w nazwach macierzy @coord), istnieje pewna wewnętrzna kontrola spójności, która wyjaśnia, dlaczego działa to tylko w niektórych instancje.
Jedną z dogodnych cech jest to, że można podzestawić obiekt przestrzenny poprzez indeks wiersza. Tutaj dzielę pierwsze 10 obiektów.
sub.sdat <- sdat[1:10,]
Lub alternatywnie losowa próbka (n = 10) przy użyciu wektora indeksu wiersza.
rs.sdat <- sdat[sample(1:nrow(sdat), 10),]
Zrozumienie indeksowania i używania nawiasów jest bardzo ważną rzeczą przy pisaniu kodu R.
Edycja (24.03.2017): Należy pamiętać, że prosta klasa funkcji (sf), zgodna ze standardem GeoJSON, prawdopodobnie stanie się nowym standardem dla obiektów przestrzennych w R. Szczegółowy opis tej klasy można przeczytać w CRAN sf strona Proste funkcje dla R .
R
składni, nie dotyczy ono w szczególnościsp
pakietu ani jego obiektów.R
jest zainstalowany z samouczkiem: zacznij od swoich badań. Internet i media drukowane oferują bogactwo dodatkowych zasobów do naukiR
.