当我有一个SpatialPolygonsDataFrame对象时,我知道我可以通过两种方式获取数据:
spatial_df@data$column
spatial_df$column
但是我不明白为什么第二种方式是可能的 . 我以为我必须使用 @
访问 data
插槽?这是关于 SpatialPolygonsDataFrame
类的独特之处,还是关于S4对象的一般情况?
一个可能的答案是在sp documentations中,它提到 SpatialPolygonsDataFrame
类的方法 [
. 但是,由于 $
相当于 [[
,而不是 [
,我的回答是_2940639 .
1 回答
简短的回答是
$
的这种行为是由sp
包中的Spatial
类实现的,并不是一般S4对象的特征 .答案很长(我怎么知道这个):
showMethods("$")
了解泛型$
的所有方法 .所以我们知道
SpatialPolygonsDataFrame-class
从Spatial-class
继承$
. 我们通过以下方式找到了根:getMethod("$", "Spatial")
,其中显示_294069_的_294069_实现如下:功能(x,名称)
{
if(!(“data”%in%slotNames(x)))
停止(“没有属性的对象的$ $方法”)
X @数据[[名称]]
}
<environment:namespace:sp>
因此,
spatial_df$col_name
是spatial_df@data[["col_name"]]
的快捷方式