通过识别R中的行来定义多边形对象

时间:2018-04-18 12:26:49

标签: r

我有一个数据集包含行,我已将它们导入R.我想仔细查看它们的坐标,并定义每个点的相同的第一个和最后一个坐标(如果有的话) - >(查找对于多边形)。因此,我正在使用Slot,这使我能够仔细查看所需对象的详细信息。 我的最终目标是为每一行定义相同点坐标(第一个和最后一个)的数量,以便发现我数据中潜在多边形的数量。 重新解决我的困难是以下问题: 有多少行对象有可能成为多边形? 为此,我做了几个步骤: 在第一步中,我将数据读入R. 第二步,我用槽来仔细查看每个点的坐标(点序列表示线对象)。 第三步:我试图定义相同点的数量,但我遇到一个错误,说CRD未找到

在下文中,您可以查看代码

enter library(maptools)
#Read data directly from National Geophysical Data Center (NGDC) coastline 
#extractor. 
shorelinedat="http://www.asdar-book.org/RC1/datasets/auckland_mapgen.dat"
#Assign CRS
llCRS <- CRS("+proj=longlat +ellps=WGS84")
#Read data from mapgen into a SpatialLines object.
auck_shore <- MapGen2SL("auckland_mapgen.dat", llCRS)
#Required code to identify the lines.
lns <- slot(auck_shore, "lines")
table(sapply(lns, function(x) length(slot(x, "Lines"))))

以下是我遇到错误的代码

#identifying the number of identical coordinates
islands_auck <- sapply(lns, function(x) {
+ crds <- slot(slot(x, "Lines")[[1]], "coords")
+ identical(crds[1, ], crds[nrow(crds), ])
+ })

这是错误

Error in +crds <- slot(slot(x, "Lines")[[1]], "coords") : 
object 'crds' not found

如果有人能给出提示,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

这只是一个猜测,那些+实际上在您的代码中?如果我尝试在它之前分配一个带有+的变量(正如你在发布的代码示例中所做的那样),我会得到同样的错误:

+ crds <- 5
Error in +crds <- 5 : object 'crds' not found

当您运行多行代码块时,R会在控制台中插入+来显示连续的行,但这只是一种视觉效果,它们在您的实际代码中是非法的。

答案 1 :(得分:0)

我遇到的问题与最终代码中的语法有关,我在下面修改了它们

islands_auck <- sapply(lns, function(x) {
crds <- slot(slot(x, "Lines")[[1]], "coords")
identical(crds[1, ], crds[nrow(crds), ])
})
table(islands_auck)

所以最终结果将是

 islands_auck
 FALSE  TRUE 
  16    64 

16行没有相等的第一个和最后一个坐标(闭合多边形) 带有闭合多边形的64行