【发布时间】:2018-06-17 13:09:40
【问题描述】:
我正在尝试做的任务是使用 R 中的 sp 包非常简单,但我正在尝试学习 sf 因此我的问题。我正在尝试在 R 中创建点的形状。我有很多点,所以它必须是有效的。我在sp 和sf 都成功了,但是 sf 方法很慢。作为sf 的新手,我觉得我没有以最有效的方式进行操作。
我制作了 3 个不同的功能来做同样的事情:
1) 100% sp
f_rgdal <- function(dat) {
coordinates(dat) <- ~x+y
}
2) 100% sf(可能很糟糕......)
f_sf <- function(dat) {
dat <- st_sfc(
lapply(
apply(dat[,c("x", "y")], 1, list), function(xx) st_point(xx[[1]])
)
)
}
3) 两者混合:
f_rgdal_sp <- function(dat) {
coordinates(dat) <- ~x+y
dat <- as(dat, "sf")
}
如果我对它们进行基准测试,您会发现函数 2 和 3 都比函数 1 慢:
set.seed(1234)
dd <- data.frame(x = runif(nb_pt, 0, 100),
y = runif(nb_pt, 0,50),
f1 = rnorm(nb_pt))
library(sp)
library(sf)
library(rbenchmark)
benchmark(f_rgdal(dd), f_sf(dd), f_rgdal_sp(dd), columns = c("test", "elapsed"))
test elapsed
1 f_rgdal(dd) 0.22
3 f_rgdal_sp(dd) 4.82
2 f_sf(dd) 4.08
他们是加快sf 的方法吗?最后,我想使用st_write,它比writeOGR 更快,所以留在sp 并不理想。
【问题讨论】: