gpt4 book ai didi

r - 为什么可以使用 `$` 对 SpatialPolygonsDataFrame 进行子集化?

转载 作者:行者123 更新时间:2023-12-04 12:10:20 28 4
gpt4 key购买 nike

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

spatial_df@data$column
spatial_df$column

但是我不明白为什么第二种方式可行。我认为我必须使用 @ 访问 data 槽?这是 SpatialPolygonsDataFrame 类的独特之处,还是一般的 S4 对象?

一个可能的答案在 sp documentations 中,其中提到了 SpatialPolygonsDataFrame 类的方法 [。但是,由于 $ 等同于 [[,而不是 [,我不确定这就是答案。

最佳答案

简短的回答是 $ 的这种行为是由 sp 包中的 Spatial 类实现的,而不是通用 S4 对象。

长答案(我是如何发现的):

  • 使用showMethods("$") 找出通用$ 的所有方法。
The result shows:
Function: $ (package base)
x="C++Class"
x="envRefClass"
x="Module"
x="Raster"
x="refObjectGenerator"
x="Spatial"
x="SpatialGDAL"
x="SpatialPoints"
x="SpatialPolygonsDataFrame"
(inherited from: x="Spatial")

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

  • getMethod("$", "Spatial"),显示了 $Spatial-class 的实现如下:<
Method Definition:

function (x, name)
{
if (!("data" %in% slotNames(x)))
stop("no $ method for object without attributes")
x@data[[name]]
}
<environment: namespace:sp>

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

关于r - 为什么可以使用 `$` 对 SpatialPolygonsDataFrame 进行子集化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27477163/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com