2014-09-03 103 views
0

亲爱的人,stackoverflow。在for循环中计算R中多边形的面积

我想计算一个SPDF的每个单独的多边形的面积。我正在尝试制作一个功能,它允许我将数据输入并获取一个区域列表。我坚持创建一个返回我的多边形的所有区域的for循环。对于一个多边形的表面计算下面的代码工作:

surfacefirstpolygon <- gArea(inputSPDF[1,1]) 

此代码打印由一个我的一个当我运行下面的代码。

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 @数据,I,J,..., drop = FALSE): 未定义的列被选中。

有人知道发生了什么问题吗?

结果=

dd = dim(inputSPDF) 
for(i in 1:dd[1]){ 
    areasofpolygons[i] <- gArea(inputSPDF[i,1]) 
} 
+0

我想这可能是因为列表无法将它们置于彼此之下。所以我尝试了以下也不起作用: test < - list() for(i in 1:length(polys)){ test [i] < - gArea(gem_ned_LAEA [i,i]) } – Zuenie 2014-09-03 08:47:02

+0

什么是数据和gArea?这是不可复制的!顺便说一句:R中没有列表理解机制,你试图这样做。看看[应用功能](http://nsaunders.wordpress.com/2010/08/20/a-brief-introduction-to-apply-in-r/)来实现这样的事情。 – 2014-09-03 08:58:03

+0

数据是我的输入数据,gArea是计算多边形表面的包rgeos的函数。感谢您申请链接。现在看看它。 关于可重复性:我正在使用SpatialPolygonDataFrame。从头开始制作一个并不容易。在我问的另一个问题中,我将脚本链接到了保存箱,并让人们从我的保存箱中下载我的shapefile文件。然后我得到了这可能是不安全的评论。我不知道如何使它成为一个更好的可重复的脚本。 – Zuenie 2014-09-03 09:01:11

回答

1

尝试:

dd = dim(inputSPDF) 
for(i in 1:dd[1]) for(j in 1:dd[2]){ 
     areasofpolygons[length(areasofpolygons)+1] = gArea(inputSPDF[i,j]) 
    } 
areasofpolygons 

在问题中提到的错误可能表示i被超过的尺寸( “选择的未定义的列”)。另外,如果使用[i,i],则只会访问相同的行和列号。

+1

为了让它成为一个很好的答案,请在代码的作用和方式上添加一些评论。 – 2014-09-03 10:39:46

+1

我已经添加了一些信息。来自@Zenie的反馈也将不胜感激。 – rnso 2014-09-03 11:15:30

+0

当我运行这些线时,它会运行相当长的时间(如5分钟),然后返回一个空的areasofpolygons。它不返回错误。但是,谢谢你已经帮助我!我不明白为什么在我的第一个脚本中列的数量也是错误的。 – Zuenie 2014-09-03 11:23:32