【发布时间】:2014-09-03 08:40:40
【问题描述】:
亲爱的 stackoverflow 的人们。
我正在尝试计算 SPDF 的每个单独多边形的面积。我正在尝试实现它的功能,使我可以将数据放入并获取区域列表。我坚持创建一个返回多边形所有区域的 for 循环。对于一个多边形的表面计算,以下代码有效:
surfacefirstpolygon <- gArea(inputSPDF[1,1])
当我运行以下代码时,此代码会一一打印 i。
polys <- slot(inputSPDF,"polygons")
for(i in 1:length(polys)){
print(i)
}
然后我尝试通过执行以下操作将这些代码段放在一个 for 循环中:
polys <- slot(inputSPDF,"polygons")
areasofpolygons <- for(i in 1:length(polys)){
gArea(inputSPDF[i,i])
}
这不起作用并给我以下错误。
is.projected(spgeom) 中的错误:
在为函数“is.projected”选择方法时评估参数“obj”时出错:[.data.frame(x@data, i, j, ..., drop = FALSE) 中的错误:
选择了未定义的列。
有人知道怎么回事吗?
结果 =
dd = dim(inputSPDF)
for(i in 1:dd[1]){
areasofpolygons[i] <- gArea(inputSPDF[i,1])
}
【问题讨论】:
-
我认为这可能是因为列表无法将它们放在一起。所以我尝试了以下也不起作用的方法: test
-
什么是
data和gArea?这是不可复制的!顺便说一句:R 中没有您尝试这样做的列表理解机制。看看apply functions 来实现这样的事情。 -
data 是我的输入数据,gArea 是 rgeos 包的函数,它计算多边形的表面。谢谢你的申请链接。现在会看。关于再现性:我正在使用 SpatialPolygonDataFrame。从头开始制作一个并不容易。在我问的另一个问题中,我将我的脚本链接到 Dropbox,让人们从我的 Dropbox 下载我的 shapefile。然后我得到评论说这可能不安全。我不知道如何使它成为一个更好的可重现脚本。
-
在“for”循环之前,dim(inputSPDF) 的输出是什么?
-
不幸的是,您在下面的答案是返回一个空的多边形区域。当我运行以下代码时: - dd = dim(inputdata) - 运行 dd 返回:[1] 510 58