首页 文章

为什么可以使用`$`来子集SpatialPolygonsDataFrame?

提问于
浏览
3

当我有一个SpatialPolygonsDataFrame对象时,我知道我可以通过两种方式获取数据:

spatial_df@data$column
spatial_df$column

但是我不明白为什么第二种方式是可能的 . 我以为我必须使用 @ 访问 data 插槽?这是关于 SpatialPolygonsDataFrame 类的独特之处,还是关于S4对象的一般情况?

一个可能的答案是在sp documentations中,它提到 SpatialPolygonsDataFrame 类的方法 [ . 但是,由于 $ 相当于 [[ ,而不是 [ ,我的回答是_2940639 .

1 回答

  • 6

    简短的回答是 $ 的这种行为是由 sp 包中的 Spatial 类实现的,并不是一般S4对象的特征 .

    答案很长(我怎么知道这个):

    • 使用 showMethods("$") 了解泛型 $ 的所有方法 .

    结果显示:
    功能:$(包基)
    x =“C级”
    X = “envRefClass”
    X = “模块”
    X = “栅格”
    X = “refObjectGenerator”
    X = “空间”
    X = “SpatialGDAL”
    X = “SpatialPoints”
    X = “SpatialPolygonsDataFrame”
    (继承自:x =“Spatial”)

    所以我们知道 SpatialPolygonsDataFrame-classSpatial-class 继承 $ . 我们通过以下方式找到了根:

    • getMethod("$", "Spatial") ,其中显示_294069_的_294069_实现如下:

    方法定义:

    功能(x,名称)
    {
    if(!(“data”%in%slotNames(x)))
    停止(“没有属性的对象的$ $方法”)
    X @数据[[名称]]
    }
    <environment:namespace:sp>

    因此, spatial_df$col_namespatial_df@data[["col_name"]] 的快捷方式

相关问题