Uzamsal sp verileri S4 sınıfı nesnelerdir ve temsil edilen uzamsal özellik sınıfının bileşenlerini içeren yuvalardan (@ @ denir) oluşur (örneğin, @data öznitelikler içerir, @coordlar koordinat çiftleri içerir, vb ...). En üst düzey yuva adlarını slotNames () kullanarak döndürebilirsiniz, ancak yinelemeli değildir ve çokgen sınıf nesneleri için iç içe yuva adlarını döndürmez. Her yuva farklı bir nesne sınıfı içerebilir ve üzerinde çalışmadan önce str () veya class () kullanılarak kontrol edilmelidir. @Data yuvası her zaman bir data.frame nesnesidir ve @coords bir matristir, @polygons ise ek yuvalara (labpt, alan, delik, ringDir ve coords) sahip bir liste nesnesidir.
Kullanılabilir yuvalar ve bunların düzenlenmesi, ne tür bir özellik sınıfının temsil edildiğine bağlıdır. SpatialPointsDataFrame nesneleri en temel olanıdır, oysa SpatialPolygonsDataFrame nesneleri yuvalama (yukarıda görüldüğü gibi) içerir. Her bir çokgeni temsil eden bu iç içe geçmiş yapının, her liste nesnesinde (çokgen) işlemek için aptal gibi bir şey kullanması dikkate alınmalıdır.
Aşağıda, "çokgenler" ve ardından iç içe "alan" yuva (lar) ını yineleyerek her çokgenin alanını döndürmek için aptal kullanan bir örnek verilmiştir.
sapply(slot(sdat, 'polygons'), function(i) slot(i, 'area'))
Çokgen nesneleri söz konusu olduğunda, her çokgen için bir liste olarak saklandıklarından, alternatif olarak liste indekslemeyi kullanabilirsiniz. İlk çokgeni döndürmek için bir örnek (SpatialPolygonsDataFrame değil "Polygon" sınıf nesnesiyle sonuçlanır):
sdat@polygons[[1]]
Sp'nin daha yeni sürümlerinde, geliştiriciler bazı durumlarda @ veri yuvasını doğrudan çağırma zorunluluğunu ortadan kaldırmaya başladı.
Örneğin, daha önce @ verileri endekslemek için:
sdat@data[sdat@data$att >= 0.5 ,]
ve şimdi:
sdat[sdat$att >= 0.5 ,]
Bununla birlikte, daha önce belirtildiği gibi, diğer yarıklar (örneğin, koordinatlar, çokgenler, vb.) İçin durum böyle değildir. [] Veya $ ne zaman kullanılacağına göre, bu hala işlem türüne bağlıdır. Köşeli parantez "[]" veri çerçevesindeki bir adı çağırmak için kullanılabilir, ancak öncelikle dizin oluşturma için kullanılırken, $ özellikle veri çerçevesindeki bir sütunu çağırmak için kullanılır. Bir sütun adına "dolaylı" çağrılmasının nedeni, geliştiricilerin sp nesnesi üzerinde özyinelemeli bir aramaya izin vermek için işlevsellik eklemiş olmalarıdır. Bununla birlikte, ad çakışmalarını önlemek için (örneğin; veri çerçevenizde x, y sütunlarına sahip olmak @coord matris adlarındaki x, y adlarıyla çakışır), bunun neden yalnızca bazılarında çalıştığını açıklayan bazı iç tutarlılık denetimleri vardır örnekleri.
Uygun bir karakteristik, uzamsal bir nesneyi bir satır indeksi üzerinden alt kümeye atayabilmenizdir. Burada ilk 10 nesneyi alt kümelendiriyorum.
sub.sdat <- sdat[1:10,]
Veya alternatif olarak, bir sıra indeksi vektörü kullanan rastgele bir örnek (n = 10).
rs.sdat <- sdat[sample(1:nrow(sdat), 10),]
İndekslemeyi ve parantezlerin nasıl kullanılacağını anlamak R kodu yazarken çok önemlidir.
Düzenleme (03/24/2017): GeoJSON standardını izleyen basit özellik (sf) sınıfının muhtemelen R'deki uzamsal nesneler için yeni standart olacağını unutmayın. CRAN sf'de bu sınıfın ayrıntılı bir açıklamasını okuyabilirsiniz. web sitesi R için Basit Özellikler .
R
sözdizimi ile ilgili bir soru olduğundan,sp
pakete veya nesnelerine özgü değildir .R
bir öğretici ile yüklenir: araştırmanızda oradan başlayın. Web ve basılı medya, öğrenim için zengin ek kaynaklar sunarR
.