Vairāk

R piemēro funkciju savukārt katrai spatialPolygonsDataFrame apakškopai

R piemēro funkciju savukārt katrai spatialPolygonsDataFrame apakškopai


Mēģinu iegūt visu daudzstūru laukumu SpatialPolygonsDataFrame:parcProj.

bibliotēka ("rgeos") gArea (parcProj [2,])

darbojas labi, bet:

piemērot (parcProj, 1, gArea)

vai

sapply (parcProj @ poligoni, gArea)

nevajag.

Jebkurš standarta veids, kā pieteikties, papildus acīmredzamajam:

(i in 1: garums (parcProj)) apgabaliem <- c (apgabali, gArea (parcProj [i,]))

pieteiktiesnav īsti pareizais rīks, jo tas ir datu veids (veida), nevis masīvs.

Kā būtu

gArea (parcProj, byid = TRUE)

Ne tas, ka @ mdsumner atbilde nav pilnīgi pareiza un godīgi saprotama, bet kāpēc ne tikai izvilkt apgabalus no "daudzstūru" un "apgabala" slota (-iem)?

sapply (slots (parcProj, "daudzstūri"), funkcija (i) slots (i, "apgabals"))

Es gan pamanīju kļūmi gan slota vērtībās, gan vērtībās, ko gArea atdeva attiecībā pret reāliem daudzstūriem. Kā ilustrēts ar šo kodu, gArea atgriež pareizo laukumu daudzstūrim ar caurumu, turpretī laukuma slots nav pareizs (kā paredzēts). Tomēr, ja "caurums" ir faktiskais daudzstūris, ne platība, ne platības slots neatgriež pareizās vērtības. Tas norāda uz kļūdu, kurā gArea neatgriež pareizo apgabalu ar ligzdotiem daudzstūriem.

bibliotēka (rgeos) bibliotēka (sp) Sr1 <- daudzstūris (cbind (c (2,4,4,1,2), c (2,3,5,4,2))) Sr2 <- daudzstūris (cbind (c (5,4,2,5), c (2,3,2,2))) Sr3 <- daudzstūris (sasaistīt (c (4,4,5,10,4), c (5,3,2, 5,5))) Sr4 <- daudzstūris (cbind (c (5,6,6,5,5), c (4,4,3,3,4)), caurums = TRUE) Srs1 <- daudzstūri (saraksts (Sr1), "s1") Srs2 <- daudzstūri (saraksts (Sr2), "s2") Srs3 <- daudzstūri (saraksts (Sr3, Sr4), "s3hole") #### ar caurumu poly.hole <- SpatialPolygons (saraksts (Srs1, Srs2, Srs3), 1: 3) sapply (slots (poly.hole, "daudzstūri"), function (i) slot (i, "area")) gArea (poly.hole, byid = TRUE) #### bez cauruma Srs3 <- daudzstūri (saraksts (Sr3), "s3") poly.nohole <- SpatialPolygons (saraksts (Srs1, Srs2, Srs3), 1: 3) sapply (sprauga (poly.nohole, "daudzstūri) "), funkcija (i) slots (i," apgabals ")) gArea (poly.nohole, byid = TRUE) #### ar reālu daudzstūri cauruma Sr4 vietā <- Daudzstūris (cbind (c (5,6, 6,5,5), c (4,4,3,3,4))) Srs4 <- daudzstūri (saraksts (Sr4), "s4") poli <- SpatialPolygons (saraksts (Srs1, Srs2, Srs3, Srs4) , 1: 4) sapply (slots (poli, "daudzstūri"), funkcija (i) slots (i, "apgabals")) gArea (poly, byid = TRUE) # Plota datu par (m sarauga = c (2,2)) diagramma (poliuretāls, kol = 1: 3, pbg = "balts"); virsraksta ("bedrītes") sižets (poli.nohols, kols = 1: 3); nosaukums (" bez cauruma ") sižets (poli, kol = 1: 4); nosaukums (" īsts poli ")

Skatīties video: Working With Geographic Shapefiles in R