R 从两列矩阵创建sf对象

R 从两列矩阵创建sf对象,r,sf,R,Sf,我有一个简单的两列矩阵,我想将其转换为sf对象,其中每行指定一个点: > set.seed(123);m=matrix(runif(10),ncol=2) > m [,1] [,2] [1,] 0.2875775 0.0455565 [2,] 0.7883051 0.5281055 [3,] 0.4089769 0.8924190 [4,] 0.8830174 0.5514350 [5,] 0.9404673 0.4566147 最简单的方法不起作用,

我有一个简单的两列矩阵,我想将其转换为
sf
对象,其中每行指定一个点:

> set.seed(123);m=matrix(runif(10),ncol=2)
> m
          [,1]      [,2]
[1,] 0.2875775 0.0455565
[2,] 0.7883051 0.5281055
[3,] 0.4089769 0.8924190
[4,] 0.8830174 0.5514350
[5,] 0.9404673 0.4566147
最简单的方法不起作用,因为
apply
将点重新组合到一个矩阵中,操作只会变成一个非常缓慢的转置函数:

> apply(m,1,st_point)
          [,1]      [,2]      [,3]      [,4]      [,5]
[1,] 0.2875775 0.7883051 0.4089769 0.8830174 0.9404673
[2,] 0.0455565 0.5281055 0.8924190 0.5514350 0.4566147
在不进行显式循环的情况下,我能想到的最好的方法是这个怪物:

> st_sfc(lapply(data.frame(t(m)),st_point))
Geometry set for 5 features 
geometry type:  POINT
dimension:      XY
bbox:           xmin: 0.2875775 ymin: 0.0455565 xmax: 0.9404673 ymax: 0.892419
epsg (SRID):    NA
proj4string:    NA
POINT(0.287577520124614 0.0455564993899316)
POINT(0.788305135443807 0.528105488047004)
POINT(0.4089769218117 0.892419044394046)
POINT(0.883017404004931 0.551435014465824)
POINT(0.940467284293845 0.456614735303447)
另一个选项是通过
sp
对象,但我不想这样做。我还想要一个解决方案,只在基地R,所以没有转换到data.table或tbl等

我只是缺少了一个简单的
函数(m,“sf”)
之类的吗?

根据


您可以直接在矩阵上使用
sfheaders

sfheaders::sf_point(m)

# Simple feature collection with 5 features and 0 fields
# geometry type:  POINT
# dimension:      XY
# bbox:           xmin: 0.2875775 ymin: 0.0455565 xmax: 0.9404673 ymax: 0.892419
# epsg (SRID):    NA
# proj4string:    NA
# geometry
# 1 POINT (0.2875775 0.0455565)
# 2 POINT (0.7883051 0.5281055)
# 3  POINT (0.4089769 0.892419)
# 4  POINT (0.8830174 0.551435)
# 5 POINT (0.9404673 0.4566147)

怎么样
st_as_sf()
?@RoyalTS你试过这个吗,或者你只是在猜测吗?有根据的猜测:)这些例子需要更多的注释。当我有时间时,我会做一些编辑并提交一份PR。可能还会建议一种矩阵方法:
st_as_sf.matrix=function(x…){st_as_sf(data.frame(x),…)}
sfheaders::sf_point(m)

# Simple feature collection with 5 features and 0 fields
# geometry type:  POINT
# dimension:      XY
# bbox:           xmin: 0.2875775 ymin: 0.0455565 xmax: 0.9404673 ymax: 0.892419
# epsg (SRID):    NA
# proj4string:    NA
# geometry
# 1 POINT (0.2875775 0.0455565)
# 2 POINT (0.7883051 0.5281055)
# 3  POINT (0.4089769 0.892419)
# 4  POINT (0.8830174 0.551435)
# 5 POINT (0.9404673 0.4566147)