我正在尝试做的任务对于sp
R 中的包非常简单,但我正在尝试学习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
并不理想。