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

请求优化/精简处理空间对象的R代码,整合结果并提升效率

R语言代码优化建议:减少重复并整合结果

核心优化思路

针对你代码中重复计算、结果分散的问题,优化方向是一次性计算基础数据,再通过分组整合多阈值场景结果,既提升效率,又能得到便于后续分析的单一数据对象。

优化后代码

library(sf)
library(dplyr)
library(tidyr)

# 1. 一次性计算所有缓冲区的建筑数量和学校数量
# 避免重复调用st_intersects(空间计算耗时,重复调用浪费资源)
buffer_full <- buffer3000 %>%
  mutate(
    建筑数量 = lengths(st_intersects(., shp_BAG)),
    学校数量 = lengths(st_intersects(., shp_BAG_slim))
  )

# 2. 定义阈值列表,生成整合所有场景的数据集
thresholds <- c(1500, 1000, 500)
buffer_combined <- purrr::map_dfr(thresholds, function(th) {
  buffer_full %>%
    filter(建筑数量 >= th) %>%  # 修正原代码逻辑:需求是≥阈值,原代码写为<=
    mutate(阈值场景 = paste0("≥", th, "栋"))
})

# 可选:加入原始全量数据,方便对比
buffer_combined <- bind_rows(
  buffer_full %>% mutate(阈值场景 = "所有缓冲区"),
  buffer_combined
)

优化点说明

  • 减少重复计算:仅调用2次st_intersects(原代码调用4次),空间数据量大时效率提升明显
  • 结果统一整合:所有阈值场景的数据存储在同一个sf数据框中,通过阈值场景列区分不同场景
  • 修正逻辑错误:原代码过滤条件用了<=,与需求的「≥阈值」不符,已修正

后续分析示例

统计各场景学校总数

buffer_combined %>%
  group_by(阈值场景) %>%
  summarise(学校总数 = sum(学校数量))

绘制不同阈值场景的空间分布图

library(ggplot2)
ggplot(buffer_combined) +
  geom_sf(aes(fill = 学校数量)) +
  facet_wrap(~阈值场景) +
  scale_fill_viridis_c(name = "学校数量") +
  theme_minimal()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 04:36:01