Просторові дані sp - це об'єкти класу S4 і складаються з слотів (звані @), які містять компоненти представленого просторового класу характеристик (наприклад, @data містить атрибути, @coords містять пари координат тощо). Ви можете повернути імена слотів верхнього рівня за допомогою slotNames (), але це не рекурсивно і не поверне вкладені імена слотів для об'єктів класу багатокутників. Кожен слот може містити різний клас об’єктів, і перед тим, як працювати над ним, його слід перевірити, використовуючи str () або class (). Слот @data завжди є об'єктом data.frame, а @coords є матрицею, тоді як @polygons є об'єктом списку з додатковими слотами (labpt, area, hole, ringDir та coords).
Наявні слоти та організація їх залежить від того, який тип класу характеристик представлений. Об'єкти SpatialPointsDataFrame - найосновніші, тоді як об’єкти SpatialPolygonsDataFrame мають гніздування (як показано вище). Ця вкладена структура, що представляє кожен багатокутник, повинна обліковуватися за допомогою чогось на зразок sapply для роботи над кожним об'єктом списку (полігоном).
Ось приклад, який використовує sapply для повернення області для кожного багатокутника шляхом повторення через "полігони", потім вкладені слоти (місця) "області".
sapply(slot(sdat, 'polygons'), function(i) slot(i, 'area'))
Що стосується об'єктів багатокутника, оскільки вони зберігаються як список для кожного багатокутника, ви можете альтернативно використовувати індексацію списку. Ось приклад повернення першого багатокутника (в результаті виходить об’єкт класу "Polygon", а не SpatialPolygonsDataFrame):
sdat@polygons[[1]]
В останніх версіях sp розробники почали, в деяких випадках, видаляти необхідність безпосередньо викликати слот @data безпосередньо.
Наприклад, щоб індексувати @data раніше:
sdat@data[sdat@data$att >= 0.5 ,]
і зараз:
sdat[sdat$att >= 0.5 ,]
Однак, як було зазначено раніше, це не стосується інших слотів (наприклад, координат, багатокутників тощо). Що стосується того, коли використовувати [] або $, це все ще залежить від типу операції. Дужки "[]" можуть використовуватися для виклику імені в кадрі даних, але в основному використовуються для індексації, тоді як $ спеціально використовується для виклику стовпця в кадрі даних. Причиною того, що "непрямий" виклик на ім'я стовпця працює в тому, що розробники додали функціональність, щоб дозволити рекурсивний пошук через об'єкт sp. Однак, щоб уникнути конфліктів імен (як у вашому прикладі; наявність x, y стовпців у вашому фреймі даних суперечить іменам x, y в іменах матриці @coord), існує деяка внутрішня перевірка узгодженості, яка враховує, чому це працює лише в деяких екземпляри.
Одна зручна характеристика полягає в тому, що ви можете підставити просторовий об’єкт через індекс рядків. Тут я підмножую перші 10 об’єктів.
sub.sdat <- sdat[1:10,]
Або, як варіант, випадковий зразок (n = 10), використовуючи векторний індекс рядка.
rs.sdat <- sdat[sample(1:nrow(sdat), 10),]
Розуміння індексації та використання дужок є дуже важливою справою при написанні коду R.
Редагувати (24.03.2017): Зверніть увагу, що простий клас функції (sf), що відповідає стандарту GeoJSON, швидше за все, стане новим стандартом для просторових об'єктів у Р. Детальний опис цього класу можна прочитати в CRAN sf сайт Простий Можливості для R .
R
синтаксису, це не стосуєтьсяsp
пакету чи його об'єктів.R
встановлюється з підручника: починайте там, з ваших досліджень. Інтернет та друковані ЗМІ пропонують безліч додаткових ресурсів для навчанняR
.