0

基本上我试图在 shapefile 的 polgons 中创建 5 个随机空间点。我正在尝试st_sample()sf包中使用,但我的for循环有问题。

例子:

library(terra)
library(sf)

#10 polygons
v <- vect(system.file("ex/lux.shp", package="terra"))
v <- v[c(1:10)] 

#Empty list to store values
empty_list <- list()

#for loop
for(i in 1:length(v$ID_1)){
  
  empty_list[i] <- st_sample(x = v[i,], size = 5, 
                             type = "random", exact =T, by_polygon = T)
}

循环看起来相当简单明了。我认为问题在于st_sample()每次迭代只存储 1 个值。我应该使用列表以外的东西来存储输出值,还是for循环不是这里的正确选项?

4

1 回答 1

1

无需执行for循环。您只需要为函数的size参数指定一个向量st_sample()

我不知道您为什么要从 a 开始,SpatVector但我也给了您将对象转换为sf类对象的代码,因为该st_sample()函数需要一个sfsfc类对象

所以请在下面找到reprex。

代表

  • 代码
library(terra)
library(sf)

# Convert 'SpatVector' into 'sf' object
v_sf <- st_as_sf(v)

# Create the random points (here, 5 random points for each polygon)
set.seed(452)
points <- st_sample(v_sf, size = c(5,5), type = "random")
  • 输出
plot(st_geometry(v_sf))
plot(points, pch = 20, add= TRUE)

reprex 包于 2021-11-23 创建(v2.0.1)

于 2021-11-22T23:33:18.670 回答