当我有一个 SpatialPolygonsDataFrame 对象时,我知道我可以通过两种方式获取数据:
spatial_df@data$column
spatial_df$column
但是我不明白为什么第二种方式是可能的。我认为我必须使用
data
访问 @
插槽?这是 SpatialPolygonsDataFrame
类的独特之处,还是一般的 S4 对象?一个可能的答案是在
sp
documentations 中,它提到了 [
类的 SpatialPolygonsDataFrame
方法。但是,由于 $
等价于 [[
,而不是 [
,我不确定这就是答案。 最佳答案
简而言之,$
的这种行为是由 Spatial
包中的 sp
类实现的,并不是一般 S4 对象的特性。
长答案(我是如何发现的):
showMethods("$")
找出通用 $
的所有方法。 所以我们知道
SpatialPolygonsDataFrame-class
继承了 $
的 Spatial-class
。我们通过以下方式进入根部:getMethod("$", "Spatial")
,其中展示了 $
的 Spatial-class
实现如下: 因此,
spatial_df$col_name
是 spatial_df@data[["col_name"]]
的快捷方式关于r - 为什么可以使用 `$` 对 SpatialPolygonsDataFrame 进行子集化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27477163/