I have a shapefile "shape_clara" that was polygonized using function rasterToPolygons(x, dissolve=TRUE). But then I have multipolygons for each class, and I want to eliminate the small polygons by area. So I have to access each polygon inside the multipolygon.

I did that:

for (j in 1:length(shape_clara@polygons)){
for (i in 1:length(shape_clara@polygons[[j]]@Polygons)){
if (shape_clara@polygons[[j]]@Polygons[[i]]@area<50000) lista<-rbind(lista,i)

Ok so far, listao give me all the small polygons ID.

And then to remove the small polygons:

for (i in length(shape_clara@polygons)){

But when I look the result, they are still there.

Any tips about how to remove them?

1 Answer 1


I approached a similar problem using this function:

AreaPercent <- function(x) { tot_area <- sum(sapply(slot(x, "polygons"), slot, "area")) sapply(slot(x, "polygons"), slot, "area") / tot_area * 100

And then:

shape_clara[AreaPercent(shape_clara) > 5,]

Obviously my function using an area percent rather than specific size, but could be adapted I think to your situation? You might also have a look at rmapshaper (https://cran.r-project.org/web/packages/rmapshaper/vignettes/rmapshaper.html) and functionality in simple features (http://r-spatial.org/r/2017/03/19/invalid.html).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.