rbindlist 的空间等价物?
Spatial equivalent of rbindlist?
我需要在一个循环中绑定 SpatialPolygonDataFrames 负载。这些是通过缓冲道路文件创建的。但是,由于 class SpatialLinesDataFrame 的 'roads' 文件有 15000 行长,rbind 函数会逐渐变慢。如果它们是数据帧,我会使用 rblindlist 来加快速度。但这不适用于 sp 对象(对吗?)。有人有好主意吗?
for (i in 1:nrow(roads)) {
temp <- gDifference(gBuffer(roads[i,], byid = T, width = 15, capStyle = 'ROUND'),
gBuffer(roads[i,], byid = T, width = 10, capStyle = 'ROUND'))
slot(slot(temp, "polygons")[[1]], "ID") <- as.character(roads[i,]$oid)
if (i == 1) {difference <- temp}
if (i > 1) {difference <- rbind(difference, temp)}
rm(temp)
print(i)
}
谢谢
詹姆斯
我不确定你是否需要循环。您可以使用包 sf
。
这是您想要实现的(我认为)的示例:
library(mapview) # for the example lines data
library(sf)
trails$diff = st_geometry(st_buffer(trails, dist = 1500)) / st_geometry(st_buffer(trails, 1000))
mapview(trails$diff)
这是您想要的结果吗?如果没有,您可能需要提供一个可重现的示例。
我需要在一个循环中绑定 SpatialPolygonDataFrames 负载。这些是通过缓冲道路文件创建的。但是,由于 class SpatialLinesDataFrame 的 'roads' 文件有 15000 行长,rbind 函数会逐渐变慢。如果它们是数据帧,我会使用 rblindlist 来加快速度。但这不适用于 sp 对象(对吗?)。有人有好主意吗?
for (i in 1:nrow(roads)) {
temp <- gDifference(gBuffer(roads[i,], byid = T, width = 15, capStyle = 'ROUND'),
gBuffer(roads[i,], byid = T, width = 10, capStyle = 'ROUND'))
slot(slot(temp, "polygons")[[1]], "ID") <- as.character(roads[i,]$oid)
if (i == 1) {difference <- temp}
if (i > 1) {difference <- rbind(difference, temp)}
rm(temp)
print(i)
}
谢谢
詹姆斯
我不确定你是否需要循环。您可以使用包 sf
。
这是您想要实现的(我认为)的示例:
library(mapview) # for the example lines data
library(sf)
trails$diff = st_geometry(st_buffer(trails, dist = 1500)) / st_geometry(st_buffer(trails, 1000))
mapview(trails$diff)
这是您想要的结果吗?如果没有,您可能需要提供一个可重现的示例。