Daugiau

R taiko funkciją paeiliui kiekvienam „spatialPolygonsDataFrame“ pogrupiui


Bandau gauti visų „SpatialPolygonsDataFrame“ daugiakampių plotą:parcProj.

biblioteka („rgeos“) gArea (parcProj [2,])

veikia gerai, bet:

taikyti (parcProj, 1, gArea)

arba

sapply (parcProj @ daugiakampiai, gArea)

neturi.

Bet koks įprastas būdas tai padaryti, be akivaizdaus:

(i i 1: ilgis (parcProj)) plotai <- c (plotai, gArea (parcProj [i,]))

kreiptisiš tikrųjų nėra tinkamas įrankis, nes tai yra duomenų rūšis (rūšių), o ne masyvas.

Kaip apie

gArea (parcProj, byid = TRUE)

Ne todėl, kad @ mdsumner atsakymas nėra visiškai teisingas ir sąžiningai lengviau suprantamas, bet kodėl gi ne tik ištraukus sritis iš „daugiakampių“ ir „srities“ lizdo (-ų)?

sapply (lizdas (parcProj, "daugiakampiai"), funkcija (i) lizdas (i, "plotas"))

Aš pastebiu gedimą tiek laiko tarpsnyje, tiek vertėse, kurias grąžino „gArea“, palyginti su skylėmis (be duomenų srities) ir realiuose daugiakampiuose. Kaip parodyta šiame kode, „gArea“ pateikia teisingą daugiakampio, kuriame yra skylė, plotą, o ploto lizdas nėra teisingas (kaip tikėtasi). Tačiau, kai „skylė“ yra tikrasis daugiakampis, nei gArea, nei ploto lizdas negrąžina teisingų verčių. Tai užsimena apie klaidą, kur „gArea“ negrąžina tinkamos srities su įdėtais daugiakampiais.

biblioteka (rgeos) biblioteka (sp) Sr1 <- daugiakampis (cbind (c (2,4,4,1,2), c (2,3,5,4,2))) Sr2 <- daugiakampis (cbind (c) (5,4,2,5), c (2,3,2,2))) Sr3 <- Daugiakampis (susietas (c (4,4,5,10,4), c (5,3,2, 5,5))) Sr4 <- Daugiakampis (susieti (c (5,6,6,5,5), c (4,4,3,3,4)), skylė = TIESA) Srs1 <- daugiakampiai (sąrašas (Sr1), "s1") Srs2 <- Daugiakampiai (sąrašas (Sr2), "s2") Srs3 <- Daugiakampiai (sąrašas (Sr3, Sr4), "s3hole") #### su skylute poly.hole <- SpatialPolygons (sąrašas (Srs1, Srs2, Srs3), 1: 3) sapply (lizdas (daugiaukštis, „daugiakampiai“), funkcija i) lizdas (i, „plotas“)) gArea (poly.hole, byid = TRUE) #### be skylės Srs3 <- Daugiakampiai (sąrašas (Sr3), "s3") poly.nohole <- SpatialPolygons (sąrašas (Srs1, Srs2, Srs3), 1: 3) sapply (plyšys (poligonas, daugiakampiai) "), funkcija (i) lizdas (i," plotas ")) gArea (poly.nohole, byid = TRUE) #### su tikruoju daugiakampiu vietoje skylės Sr4 <- Daugiakampis (cbind (c (5,6, 6,5,5), c (4,4,3,3,4))) Srs4 <- Daugiakampiai (sąrašas (Sr4), "s4") poli <- SpatialPolygons (sąrašas (Srs1, Srs2, Srs3, Srs4) , 1: 4) sapply (lizdas (poli, "daugiakampiai"), funkcija (i) lizdas (i, "plotas")) gArea (poli, byid = TRUE) # Sklypo duomenų par (m suraukti = c (2,2)) brėžinį (poliauklė, col = 1: 3, pbg = "balta"); pavadinimo ("hole") siužetą (poly.nohole, col = 1: 3); title (" be skylės ") sklypas (poli, kol = 1: 4); pavadinimas („ tikras poli ")