I dati spaziali spaziali sono oggetti di classe S4 e sono costituiti da slot (chiamati usando @) che contengono componenti della classe di caratteristiche spaziali rappresentata (ad esempio, @data contiene attributi, @coords contiene coppie di coordinate, ecc ...). È possibile restituire i nomi degli slot di livello superiore utilizzando slotNames () ma non è ricorsivo e non restituirà i nomi degli slot nidificati per gli oggetti della classe poligonale. Ciascuno slot può contenere una diversa classe di oggetti e, prima di operare su di essa, deve essere verificato usando str () o class (). Lo slot @data è sempre un oggetto data.frame e @coords è una matrice mentre @polygons è un oggetto elenco con slot aggiuntivi (labpt, area, hole, ringDir e coords).
Gli slot disponibili e la loro organizzazione dipende dal tipo di classe di caratteristiche che viene rappresentata. Gli oggetti SpatialPointsDataFrame sono i più elementari, mentre gli oggetti SpatialPolygonsDataFrame hanno un annidamento (come visto sopra). Questa struttura nidificata, che rappresenta ciascun poligono, deve essere spiegata usando qualcosa come sapply per operare su ciascun oggetto della lista (poligono).
Ecco un esempio che utilizza sapply per restituire l'area per ciascun poligono ripetendo i "poligoni", quindi gli slot "area" nidificati.
sapply(slot(sdat, 'polygons'), function(i) slot(i, 'area'))
Nel caso di oggetti poligonali, poiché sono memorizzati come elenco per ciascun poligono, è possibile utilizzare in alternativa l'indicizzazione degli elenchi. Ecco un esempio per restituire il primo poligono (risultante in un oggetto di classe "Poligono" e non in SpatialPolygonsDataFrame):
sdat@polygons[[1]]
Nelle versioni più recenti di sp gli sviluppatori hanno iniziato, in alcuni casi, a rimuovere la necessità di chiamare direttamente lo slot @data.
Ad esempio, per indicizzare @data in precedenza:
sdat@data[sdat@data$att >= 0.5 ,]
e adesso:
sdat[sdat$att >= 0.5 ,]
Tuttavia, come precedentemente indicato, questo non è il caso degli altri slot (ad es. Coordinate, poligoni, ecc ...). Per quanto riguarda quando usare [] o $ questo dipende ancora dal tipo di operazione. Le parentesi "[]" possono essere usate per chiamare un nome in un dataframe ma sono usate principalmente per l'indicizzazione mentre $ è usato specificamente per chiamare una colonna in un dataframe. Il motivo per cui una chiamata "indiretta" al nome di una colonna funziona perché gli sviluppatori hanno aggiunto funzionalità per consentire una ricerca ricorsiva attraverso l'oggetto sp. Tuttavia, per evitare conflitti di nomi (come nel tuo esempio; avere colonne x, y nel tuo frame di dati sarebbe in conflitto con i nomi x, y nei nomi della matrice @coord) c'è un certo controllo interno di coerenza che spiega perché questo funziona solo in alcuni le istanze.
Una caratteristica utile è che puoi sottoinsieme un oggetto spaziale attraverso un indice di riga. Qui sto sottoponendo i primi 10 oggetti.
sub.sdat <- sdat[1:10,]
Oppure, in alternativa, un campione casuale (n = 10) usando un vettore indice di riga.
rs.sdat <- sdat[sample(1:nrow(sdat), 10),]
Comprendere l'indicizzazione e come usare le parentesi è una cosa molto importante nella scrittura del codice R.
Modifica (24/03/2017): Nota che la classe caratteristica semplice (sf), seguendo lo standard GeoJSON, diventerà probabilmente il nuovo standard per gli oggetti spaziali in R. Puoi leggere una descrizione dettagliata di questa classe sul CRAN sf sito web semplice Caratteristiche per R .
R
sintassi, non è particolare per ilsp
pacchetto o i suoi oggetti.R
è installato con un tutorial: inizia lì nella tua ricerca. Il Web e i supporti di stampa offrono numerose risorse aggiuntive per l'apprendimentoR
.