gpt4 book ai didi

r - 为什么 sf 对象不能使用 R 中的所有 data.table 方法?

转载 作者:行者123 更新时间:2023-12-05 06:12:08 25 4
gpt4 key购买 nike

我正在用 R 学习 sf。因为我非常喜欢 data.table,所以我想我可以同时使用两者。但是,从 data.table 派生的 sf 对象似乎不能再使用 data.table 中的方法。下面是一个例子:

首先,我生成了一个非常简单的data.table 并将它变成了一个sf 对象。到目前为止一切顺利。

> dfr <- data.table(id = c("hwy1", "hwy2"), 
+ cars_per_hour = c(78, 22),
+ lat = c(1, 2),
+ lon = c(3, 4))
> my_sf <- st_as_sf(dfr , coords = c("lon", "lat"))

然后我检查my_sf 的结构。它是一个sf对象,一个data.table和一个data.frame

> str(my_sf)
Classes ‘sf’, ‘data.table’ and 'data.frame': 2 obs. of 3 variables:
$ id : chr "hwy1" "hwy2"
$ cars_per_hour: num 78 22
$ geometry :sfc_POINT of length 2; first list element: 'XY' num 3 1
- attr(*, "sf_column")= chr "geometry"
- attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA NA
..- attr(*, "names")= chr "id" "cars_per_hour"

然后我尝试了一些任意函数unique,但它不起作用。实际上这个 my_sf 根本不能用作 data.table。

> my_sf[, unique(id)]
Error in unique(id) : object 'id' not found

请问有人知道是什么原因吗? sf 不能使用data.table 吗?

最佳答案

我的猜测是函数 st_as_sf 已经破坏了 .internal.selfref 属性,将 data.table 变回 data.frame,尽管类名已被保留。

> str(dfr)

#Classes ‘data.table’ and 'data.frame': 2 obs. of 4 variables:
#$ id : chr "hwy1" "hwy2"
#$ cars_per_hour: num 78 22
#$ lat : num 1 2
#$ lon : num 3 4
#- attr(*, ".internal.selfref")=<externalptr>

setDT(my_sf) 可能足以将 data.frame 变回 data.table

关于r - 为什么 sf 对象不能使用 R 中的所有 data.table 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63701779/

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