【问题标题】:calculating areas of polygons in R in a for loop在for循环中计算R中多边形的面积
【发布时间】: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
  • 什么是datagArea?这是不可复制的!顺便说一句:R 中没有您尝试这样做的列表理解机制。看看apply functions 来实现这样的事情。
  • data 是我的输入数据,gArea 是 rgeos 包的函数,它计算多边形的表面。谢谢你的申请链接。现在会看。关于再现性:我正在使用 SpatialPolygonDataFrame。从头开始制作一个并不容易。在我问的另一个问题中,我将我的脚本链接到 Dropbox,让人们从我的 Dropbox 下载我的 shapefile。然后我得到评论说这可能不安全。我不知道如何使它成为一个更好的可重现脚本。
  • 在“for”循环之前,dim(inputSPDF) 的输出是什么?
  • 不幸的是,您在下面的答案是返回一个空的多边形区域。当我运行以下代码时: - dd = dim(inputdata) - 运行 dd 返回:[1] 510 58

标签: r polygons surface


【解决方案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],则只会访问相同的行号和列号。

【讨论】:

  • 为了使它成为一个好的答案,请添加一些关于此代码的作用和方式的 cmets。
  • 我添加了一些信息。来自@Zuenie 的反馈也将不胜感激。
  • 当我运行这些行时,它会运行很长时间(比如 5 分钟),然后返回一个空的多边形区域。它不返回错误。但是已经谢谢你帮助我了!我不明白为什么我的第一个脚本中的列数也会出错。
  • 您的循环没有分配结果。我在上面编辑了我的代码。尝试让我们知道结果。
  • 知道了!删除 j 部分并在公式中包含多边形区域,它可以工作。所以第一行:dd = dim(inputSPDF) 第二行:for(i in 1:dd[1]){ areaofpolygons[i]
猜你喜欢
  • 1970-01-01
  • 2019-02-22
  • 2012-04-16
  • 2013-11-13
  • 1970-01-01
  • 2021-06-27
  • 2013-10-24
  • 2015-06-29
  • 1970-01-01
相关资源
最近更新 更多