Одна из причин, по которой важно показывать данные, заключается в том, что вы, возможно, задаете не тот вопрос.Если вы хотите использовать raster::buffer
с SpatialPolygonsDataFrame
и сохранить этот тип объекта, вам следует использовать опцию dissolve=FALSE
library(raster)
p <- shapefile(system.file("external/lux.shp", package="raster"))
b1 <- buffer(p, .1)
class(b1)
#[1] "SpatialPolygons"
b2 <- buffer(p, .1, dissolve=FALSE)
class(b2)
#[1] "SpatialPolygonsDataFrame"
, которая, вероятно, решит вашу проблему.Чтобы ответить на ваш вопрос о создании SpatialPolygonDataFrame
объектов из списка SpatialPolygon
объектов
Пример списка объектов SpatialPolygon
library(raster)
p <- shapefile(system.file("external/lux.shp", package="raster"))
s <- as(p, 'SpatialPolygons')
x <- lapply(seq(1,12,3), function(i) s[i:(i+2),])
Предположительно, у вас уже есть объекты data.frame, которым вы хотите соответствоватьНо я просто создаю их здесь.Это выдает ошибку
z <- lapply(x, function(i) SpatialPolygonsDataFrame(i, data.frame(id=1:length(i))))
#Error in SpatialPolygonsDataFrame(i, data.frame(id = 1:length(i))) :
#row.names of data and Polygons IDs do not match
Это работает
z <- lapply(x, function(i) SpatialPolygonsDataFrame(i, data.frame(id=1:length(i)), match.ID = FALSE))
В большинстве случаев вы захотите объединить объекты.Чтобы отследить их, вы можете сделать
zz <- lapply(1:length(x), function(i) SpatialPolygonsDataFrame(x[[i]], data.frame(id=rep(i, length(x[[i]]))), match.ID = FALSE))
sp <- bind(zz)