对sf对象的逐行操作

obr*_*oil 2 r purrr tidyverse r-sf

我在几何形状为多边形类型的sf对象上进行按行操作遇到了一些麻烦。

by_row中的sf函数似乎不起作用,例如,以下代码应创建一个包含边界框对象的列表列:

 purrr::by_row(sf_polygons_object, function(x) {
   list(st_bbox(x))
 }, .to = 'bb')
Run Code Online (Sandbox Code Playgroud)

UseMethod(“ st_bbox”)中的错误:没有适用于“ st_bbox”的适用方法应用于类“ c('tbl_df','data.frame')”的对象

(本身并不是最有用的示例,但可以说明问题)。

我尝试了几种替代方法,例如rowwise() %>% mutate()mutate( x = apply(., 1, function(x) ...))和,它们都无法工作,因为它们不向st_bbox()提供所需的sf对象。这是一个错误,还是我处理问题的能力很差?

编辑:可复制的示例

library(sp)
library(rgdal)
library(rgeos)
library(sf)
library(tidyverse)
library(rnaturalearth)

nec <- st_as_sf(ne_countries()[1:5,]) %>%
  purrr::by_row(., function(x) st_bbox(x), .to = 'bb')
Run Code Online (Sandbox Code Playgroud)

Pie*_*une 5

无需黑客。只需拆分并映射函数:

st_as_sf(ne_countries()[1:5,]) %>% 
  mutate(bb = split(., 1:5) %>% purrr::map(st_bbox))
Run Code Online (Sandbox Code Playgroud)