You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于含椭圆参数的DataFrame创建空间椭圆对象?

解决椭圆空间对象创建的错误问题

错误原因

在rowwise()管道后直接调用ellipse时,管道会自动把每行的data.frame作为第一个参数传给ellipse,但sfdep::ellipse并不需要这个参数,因此触发了"unused argument (.)"错误。

解决方案

下面提供两种可行的实现方式,最终都会生成包含所有椭圆的sf空间对象:

方案一:使用pmap批量生成椭圆

library(dplyr)
library(sfdep)
library(purrr)
library(sf)

# 生成椭圆并转为sf对象
dat_sf <- dat %>%
  mutate(
    # 用pmap遍历每行参数生成椭圆坐标矩阵
    ellipse_coords = pmap(list(x, y, sx, sy), 
                          ~ ellipse(x = ..1, y = ..2, sx = ..3, sy = ..4, n = 10, rotation = 0)),
    # 将坐标矩阵转为多边形几何对象
    ellipse_geom = map(ellipse_coords, ~ st_polygon(list(.x))) %>% st_sfc()
  ) %>%
  # 转为sf空间对象,移除中间坐标列(可选)
  select(-ellipse_coords) %>%
  st_as_sf()

# 查看结果
dat_sf

方案二:结合rowwise与mutate实现

library(dplyr)
library(sfdep)
library(sf)

dat_sf <- dat %>%
  rowwise() %>%
  # 把椭圆坐标矩阵存入列表列,避免管道传递多余参数
  mutate(ellipse_coords = list(ellipse(x = x, y = y, sx = sx, sy = sy, n = 10, rotation = 0))) %>%
  ungroup() %>%
  # 转换为多边形几何列并转为sf对象
  mutate(ellipse_geom = map(ellipse_coords, ~ st_polygon(list(.x))) %>% st_sfc()) %>%
  select(-ellipse_coords) %>%
  st_as_sf()

验证结果

生成的dat_sf是标准的sf空间对象,你可以直接用plot(dat_sf)快速查看所有椭圆的空间分布。

内容的提问来源于stack exchange,提问作者erc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:37:22