gpt4 book ai didi

r - 获取 S4 对象的插槽值?

转载 作者:行者123 更新时间:2023-12-04 02:46:34 25 4
gpt4 key购买 nike

所以我在 R 中有一个空间多边形对象;但我不确定为什么我无法从中检索“区域”插槽。

这是我的 R session :

> spatialpolygons
An object of class "SpatialPolygons"
Slot "polygons":
[[1]]
An object of class "Polygons"
Slot "Polygons":
[[1]]
An object of class "Polygon"
Slot "labpt":
[1] 20.50516 57.72918

Slot "area":
[1] 36.85484

Slot "hole":
[1] FALSE

Slot "ringDir":
[1] 1

Slot "coords":
[,1] [,2]
[1,] 16.48438 59.73633
[2,] 22.59277 61.14258
[3,] 24.74609 55.03418
[4,] 17.49512 55.12207
[5,] 16.48438 59.73633



Slot "plotOrder":
[1] 1

Slot "labpt":
[1] 20.50516 57.72918

Slot "ID":
[1] "myMultiPolygons"

Slot "area":
[1] 36.85484



Slot "plotOrder":
[1] 1

Slot "bbox":
min max
x 16.48438 24.74609
y 55.03418 61.14258

Slot "proj4string":
CRS arguments:
+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0

> spatialpolygons@bbox
min max
x 16.48438 24.74609
y 55.03418 61.14258
> spatialpolygons@area
Error: no slot of name "area" for this object of class "SpatialPolygons"
> slotNames(spatialpolygons)
[1] "polygons" "plotOrder" "bbox" "proj4string"
> names(spatialpolygons)
[1] "myMultiPolygons"

最佳答案

首先,您应该知道 @area插槽不是有关 SpatialPolygons* 的可靠信息来源物体的实际面积。如 ?"Polygons-class" 中所述, @area slot 只是用作绘图的辅助工具(防止较小的多边形被较大的多边形覆盖)并且不考虑投影或正确考虑多边形中的孔。
要获得准确的区域,您应该改为使用 rgeos::gArea()对于具有投影坐标引用系统的图层或 geosphere::areaPolygon()对于经纬度坐标引用系统(即 CRS(+proj=longlat) )中的那些。
抛开这些注意事项,下面展示了如何获取 @area 的内容。插槽,如果你确实想要它们。

主要并发症是区域槽属于多边形 对象,而不是 空间多边形 对象(其中 多边形 对象是一个元素)。因此,您需要先深入了解 空间多边形 对象提取到个人 多边形 对象。
你已经完成了,你可以使用 @运算符来提取区域槽的内容。
以下示例使用 空间多边形 sp package vignette (warning, pdf) 的第 7 节中创建的对象:

require(sp)
# Example pasted in from Section 7 of the sp vignette
Sr1 = Polygon(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))
Sr2 = Polygon(cbind(c(5,4,2,5),c(2,3,2,2)))
Sr3 = Polygon(cbind(c(4,4,5,10,4),c(5,3,2,5,5)))
Sr4 = Polygon(cbind(c(5,6,6,5,5),c(4,4,3,3,4)), hole = TRUE)
Srs1 = Polygons(list(Sr1), "s1")
Srs2 = Polygons(list(Sr2), "s2")
Srs3 = Polygons(list(Sr3, Sr4), "s3/4")
SpP = SpatialPolygons(list(Srs1,Srs2,Srs3), 1:3)

# To extract the area of the first (or in your case only) Polygon
SpP@polygons[[1]]@area
# [1] 5.5

# Extract the areas of all three component Polygons
sapply(SpP@polygons, function(x) x@area)
# [1] 5.5 1.5 10.0

## For areas, rgeos::gArea() or geosphere::areaPolygons() are generally more appropriate
## (Note, for instance, that it properly accounts for the hole in the 3rd polygon.)
rgeos::gArea(SpP, byid=TRUE)
# s1 s2 s3/4
# 5.5 1.5 9.0

关于r - 获取 S4 对象的插槽值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8708681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com