【问题标题】:Subsetting Polygons from Spatial Polygons object by slot按插槽从空间多边形对象中设置多边形子集
【发布时间】:2019-05-15 03:56:06
【问题描述】:

我有“SpatialPolygons”对象,我想对 @hole == FALSE 的多边形进行子集化并创建一个新对象。

str(my_object) 返回:

使用下面的代码可以预测一次得到 1 个多边形(如果 @hole == TRUE 则没有),但我无法从我的对象中子集多个多边形。

newSP <- aDis[aDis@polygons[[1]]@Polygons[[1]]@hole == FALSE]

我认为我的问题在于我不知道如何“一般”引用第二个列表,即从@hole == FALSE 的列表(多边形)中获取项目。将第二个 [[]] 留空是行不通的。

附:抱歉,没有可重复的例子;我不确定如何以简单的方式重新创建此问题。

【问题讨论】:

    标签: r s4 sp


    【解决方案1】:

    最简单的方法是使用sapply

    hasHole <- sapply(
      aDis@polygons[[1]]@Polygons,
      slot,
      "hole"
    )
    aDis@polygons[[1]]@Polygons[!hasHole]
    

    不过,作为最终用户不得不求助于这种事情是不寻常的。我对这个特定的包不熟悉 --- 在它的其他地方没有定义可以帮助您访问这些插槽的函数吗?

    【讨论】:

    • 谢谢。除了包文档中提供的弃用函数列表之外,似乎没有办法专门访问这些插槽。尝试使用该功能会发出警告/建议直接使用 *apply 和插槽(就像您所做的那样)。此外,文档中其他地方关于“孔”槽的讨论表明,它可能只是一种半可靠的识别孔的方法。为处理多边形中的洞而提供的大多数其他解决方案都是变通方法。我喜欢你的解决方案——使用它可以帮助我提高对插槽的理解和使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 2018-09-30
    • 1970-01-01
    • 2022-12-09
    • 2018-12-13
    • 2015-09-06
    • 1970-01-01
    相关资源
    最近更新 更多