从 sf 中的列表中替换几何图形
Replace geometries from a list in sf
假设我有以下 sf
数据框:
library(sf)
nrows <- 10
geometry = st_sfc(lapply(1:nrows, function(x) st_geometrycollection()))
df <- st_sf(id = 1:nrows, geometry = geometry)
我还有以下列表:
mylist = list('2'=st_point(c(-73,42)), '3'=NA)
我想用列表中的点替换第二次观察的几何图形。我曾考虑过执行以下操作:
st_geometry(df[names(mylist),]) <- st_sfc(mylist)
但这会引发错误:
"Error in vapply(lst, class, rep(NA_character_, 3)) : values must
be length 3, but FUN(X[[2]]) result is length 1"
我通过首先消除 NA 值找到了以下解决方法:
condition <- mylist[!is.na(mylist)]
st_geometry(df[names(condition),]) <- st_sfc(condition)
有更好的方法吗?我可以强制 mylist
中的 NA 元素为空点吗?
那是行不通的,因为在.
mylist = list('2'=st_point(c(-73,42)), '3'= NA)
3
不是一个点而是一个逻辑,它(可能)不能以任何方式 "forced" 变成一个 sf
对象。
您可以通过预先将 mylyst
的 NA 元素替换为空 POINTS 来规避此问题。例如:
mylist[[which(is.na(mylist))]] <- st_point()
st_geometry(df[names(mylist),]) <- st_sfc(mylist)
,给出:
> df
Simple feature collection with 10 features and 1 field (with 10 geometries empty)
geometry type: GEOMETRY
dimension: XY
bbox: xmin: -73 ymin: 42 xmax: -73 ymax: 42
epsg (SRID): NA
proj4string: NA
id geometry
1 1 GEOMETRYCOLLECTION EMPTY
2 2 POINT (-73 42)
3 3 POINT EMPTY
4 4 GEOMETRYCOLLECTION EMPTY
5 5 GEOMETRYCOLLECTION EMPTY
6 6 GEOMETRYCOLLECTION EMPTY
7 7 GEOMETRYCOLLECTION EMPTY
8 8 GEOMETRYCOLLECTION EMPTY
9 9 GEOMETRYCOLLECTION EMPTY
10 10 GEOMETRYCOLLECTION EMPTY
HTH。
假设我有以下 sf
数据框:
library(sf)
nrows <- 10
geometry = st_sfc(lapply(1:nrows, function(x) st_geometrycollection()))
df <- st_sf(id = 1:nrows, geometry = geometry)
我还有以下列表:
mylist = list('2'=st_point(c(-73,42)), '3'=NA)
我想用列表中的点替换第二次观察的几何图形。我曾考虑过执行以下操作:
st_geometry(df[names(mylist),]) <- st_sfc(mylist)
但这会引发错误:
"Error in vapply(lst, class, rep(NA_character_, 3)) : values must be length 3, but FUN(X[[2]]) result is length 1"
我通过首先消除 NA 值找到了以下解决方法:
condition <- mylist[!is.na(mylist)]
st_geometry(df[names(condition),]) <- st_sfc(condition)
有更好的方法吗?我可以强制 mylist
中的 NA 元素为空点吗?
那是行不通的,因为在.
mylist = list('2'=st_point(c(-73,42)), '3'= NA)
3
不是一个点而是一个逻辑,它(可能)不能以任何方式 "forced" 变成一个 sf
对象。
您可以通过预先将 mylyst
的 NA 元素替换为空 POINTS 来规避此问题。例如:
mylist[[which(is.na(mylist))]] <- st_point()
st_geometry(df[names(mylist),]) <- st_sfc(mylist)
,给出:
> df
Simple feature collection with 10 features and 1 field (with 10 geometries empty)
geometry type: GEOMETRY
dimension: XY
bbox: xmin: -73 ymin: 42 xmax: -73 ymax: 42
epsg (SRID): NA
proj4string: NA
id geometry
1 1 GEOMETRYCOLLECTION EMPTY
2 2 POINT (-73 42)
3 3 POINT EMPTY
4 4 GEOMETRYCOLLECTION EMPTY
5 5 GEOMETRYCOLLECTION EMPTY
6 6 GEOMETRYCOLLECTION EMPTY
7 7 GEOMETRYCOLLECTION EMPTY
8 8 GEOMETRYCOLLECTION EMPTY
9 9 GEOMETRYCOLLECTION EMPTY
10 10 GEOMETRYCOLLECTION EMPTY
HTH。