Dữ liệu sp không gian là các đối tượng lớp S4 và được tạo thành từ các vị trí (được gọi là sử dụng @) có chứa các thành phần của lớp đối tượng không gian được biểu diễn (ví dụ: @data chứa các thuộc tính, @coords chứa các cặp tọa độ, v.v ...). Bạn có thể trả về tên vị trí cấp cao nhất bằng slotNames () nhưng nó không được đệ quy và sẽ không trả lại tên vị trí được lồng cho các đối tượng lớp đa giác. Mỗi vị trí có thể chứa một lớp đối tượng khác nhau và trước khi vận hành trên nó, nên được kiểm tra bằng str () hoặc class (). Vị trí @data luôn là một đối tượng data.frame và @coords là một ma trận trong khi @polygons là một đối tượng danh sách với các vị trí bổ sung (labpt, area, Hole, ringDir và coords).
Các vị trí và tổ chức có sẵn của chúng phụ thuộc vào loại lớp tính năng nào được thể hiện. Các đối tượng SpatialPointsDataFrame là cơ bản nhất, trong khi các đối tượng SpatialPolygonsDataFrame có lồng nhau (như đã thấy ở trên). Cấu trúc lồng nhau này, đại diện cho mỗi đa giác, phải được tính cho việc sử dụng một cái gì đó như sapply để hoạt động trên từng đối tượng danh sách (đa giác).
Dưới đây là một ví dụ sử dụng sapply để trả về diện tích cho mỗi đa giác bằng cách lặp qua "đa giác" sau đó, (các) vị trí "khu vực" lồng nhau.
sapply(slot(sdat, 'polygons'), function(i) slot(i, 'area'))
Trong trường hợp các đối tượng đa giác, vì chúng được lưu trữ dưới dạng danh sách cho mỗi đa giác, bạn có thể thay thế sử dụng lập chỉ mục danh sách. Dưới đây là một ví dụ để trả về đa giác đầu tiên (dẫn đến một đối tượng lớp "Đa giác" chứ không phải SpatialPolygonsDataFrame):
sdat@polygons[[1]]
Trong các phiên bản gần đây hơn của sp, các nhà phát triển đã bắt đầu, trong một số trường hợp, loại bỏ sự cần thiết phải gọi trực tiếp vị trí @data.
Chẳng hạn, để lập chỉ mục @data bạn trước đây:
sdat@data[sdat@data$att >= 0.5 ,]
và bây giờ:
sdat[sdat$att >= 0.5 ,]
Tuy nhiên, như đã chỉ ra trước đây, đây không phải là trường hợp của các vị trí khác (ví dụ: tọa độ, đa giác, v.v ...). Cho đến khi sử dụng [] hoặc $, điều này vẫn phụ thuộc vào loại hoạt động. Chân đế "[]" có thể được sử dụng để gọi tên trong khung dữ liệu nhưng chủ yếu được sử dụng để lập chỉ mục trong khi $ được sử dụng cụ thể để gọi một cột trong khung dữ liệu. Lý do một cuộc gọi "gián tiếp" đến một tên cột hoạt động mà các nhà phát triển đã thêm chức năng để cho phép tìm kiếm đệ quy thông qua đối tượng sp. Tuy nhiên, để tránh xung đột tên (như trong ví dụ của bạn; có các cột x, y trong khung dữ liệu của bạn sẽ xung đột với tên x, y trong tên ma trận @coord), có một số kiểm tra tính nhất quán nội bộ cho thấy tại sao điều này chỉ hoạt động trong một số trường hợp.
Một đặc điểm tiện lợi là bạn có thể tập hợp một đối tượng không gian thông qua một chỉ mục hàng. Ở đây tôi đang tập hợp 10 đối tượng đầu tiên.
sub.sdat <- sdat[1:10,]
Hoặc, thay vào đó, một mẫu ngẫu nhiên (n = 10) sử dụng vectơ chỉ mục hàng.
rs.sdat <- sdat[sample(1:nrow(sdat), 10),]
Hiểu về lập chỉ mục và cách sử dụng dấu ngoặc là một điều rất quan trọng trong việc viết mã R.
Chỉnh sửa (24/03/2017): Xin lưu ý rằng lớp tính năng đơn giản (sf), theo tiêu chuẩn GeoJSON, có thể sẽ trở thành tiêu chuẩn mới cho các đối tượng không gian trong R. Bạn có thể đọc mô tả chi tiết về lớp này tại CRAN sf trang web đơn giản Nét đặc trưng cho R .
R
cú pháp, nó không đặc biệt chosp
gói hoặc các đối tượng của nó.R
được cài đặt với một hướng dẫn: bắt đầu ở đó trong nghiên cứu của bạn. Web và phương tiện truyền thông in ấn cung cấp nhiều tài nguyên bổ sung cho việc họcR
.