Os dados espaciais sp são objetos da classe S4 e são compostos de slots (chamados usando @) que contêm componentes da classe de recurso espacial que está sendo representada (por exemplo, @data contém atributos, @coords contêm pares de coordenadas, etc ...). Você pode retornar os nomes dos slots de nível superior usando slotNames (), mas não é recursivo e não retornará nomes de slots aninhados para objetos de classe de polígono. Cada slot pode conter uma classe de objeto diferente e, antes de operar nele, deve ser verificado usando str () ou class (). O slot @data é sempre um objeto data.frame e @coords é uma matriz, enquanto @polygons é um objeto de lista com slots adicionais (labpt, área, furo, ringDir e cordas).
Os slots disponíveis e a organização deles dependem de que tipo de classe de recurso está sendo representado. Os objetos SpatialPointsDataFrame são os mais básicos, enquanto os objetos SpatialPolygonsDataFrame têm aninhamento (como visto acima). Essa estrutura aninhada, representando cada polígono, deve ser considerada usando algo como sapply para operar em cada objeto da lista (polígono).
Aqui está um exemplo que usa sapply para retornar a área de cada polígono iterando pelos "polígonos" e depois pelos slots "área" aninhados.
sapply(slot(sdat, 'polygons'), function(i) slot(i, 'area'))
No caso de objetos de polígono, uma vez que eles são armazenados como uma lista para cada polígono, você também pode usar a indexação de lista. Aqui está um exemplo para retornar o primeiro polígono (resultando em um objeto de classe "Polígono" e não SpatialPolygonsDataFrame):
sdat@polygons[[1]]
Nas versões mais recentes do sp, os desenvolvedores começaram, em alguns casos, removendo a necessidade de chamar o slot @data diretamente.
Por exemplo, para indexar @ dados você anteriormente:
sdat@data[sdat@data$att >= 0.5 ,]
e agora:
sdat[sdat$att >= 0.5 ,]
No entanto, como indicado anteriormente, este não é o caso dos outros slots (por exemplo, coordenadas, polígonos, etc ...). Quanto a quando usar [] ou $, isso ainda depende do tipo de operação. Os colchetes "[]" podem ser usados para chamar um nome em um quadro de dados, mas são usados principalmente para indexação, enquanto $ é usado especificamente para chamar uma coluna em um quadro de dados. O motivo pelo qual uma chamada "indireta" para um nome de coluna funciona é que os desenvolvedores adicionaram funcionalidade para permitir uma pesquisa recursiva através do objeto sp. No entanto, para evitar conflitos de nome (como no seu exemplo; ter colunas x, y no seu quadro de dados entraria em conflito com os nomes x, y nos nomes da matriz @coord), há alguma verificação de consistência interna que explica por que isso funciona apenas em alguns casos. instâncias.
Uma característica conveniente é que você pode subconjunto de um objeto espacial por meio de um índice de linha. Aqui estou subconjunto dos 10 primeiros objetos.
sub.sdat <- sdat[1:10,]
Ou, alternativamente, uma amostra aleatória (n = 10) usando um vetor de índice de linha.
rs.sdat <- sdat[sample(1:nrow(sdat), 10),]
Compreender a indexação e como usar colchetes é uma coisa muito importante na escrita do código R.
Editar (24/03/2017): Observe que a classe de recurso simples (sf), seguindo o padrão GeoJSON, provavelmente se tornará o novo padrão para objetos espaciais em R. Você pode ler uma descrição detalhada dessa classe no CRAN sf website simples caracteriza por R .
R
sintaxe, ela não é específica para osp
pacote ou seus objetos.R
está instalado com um tutorial: comece aí em sua pesquisa. A Web e a mídia impressa oferecem uma riqueza de recursos adicionais para o aprendizadoR
.