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

使用R cartogram包绘制连续面积图时出现下标赋值NA错误

解决cartogram_cont函数的NA下标赋值错误问题

问题代码

#Create the dataframe
data(wrld_simpl)
world_map4 <- wrld_simpl

news2 <- news %>% 
  group_by(iso_a3) %>% 
  select(iso_a3, Mentions_sum, Goldstein_avg) %>% 
  slice(1) %>% 
  filter(!iso_a3=="NA")

world_map5 <- merge(world_map4, news2, by.x = "ISO3", by.y = "iso_a3", all.x = TRUE, duplicateGeoms=TRUE)
world_map6 <- st_as_sf(world_map5)
world_map7 <- st_transform(world_map6, crs = 23038)

#Draw the map
world_map8 <- world_map7[!is.na(world_map7$Mentions_sum), ]
world_cartogram <- cartogram_cont(world_map8, "Mentions_sum", itermax=7)

错误信息

Error in Fij[distance <= radius[j]] <- Fbij[distance <= radius[j]] :  NAs are not allowed in subscripted assignments

排查思路

  • 检查空间几何有效性:cartogram的计算依赖完整合法的空间几何,执行st_is_valid(world_map8)查看是否存在无效几何,若有则用world_map8 <- st_make_valid(world_map8)修复。无效几何(如自交、缺失)会导致距离计算时产生NA,触发下标赋值错误。
  • 更换合适的投影:当前使用的crs=23038是针对中东区域的UTM投影,用于全球地图会引发严重变形,导致空间计算异常。建议替换为全球等面积投影,比如:
    world_map7 <- st_transform(world_map6, crs = 6933) # WGS 84 / NSIDC EASE-Grid 2.0 Global
    
  • 检查变量数值特性:
    • 确认Mentions_sum是否存在0值,cartogram_cont对0值处理可能出错,可替换为极小值(如world_map8$Mentions_sum[world_map8$Mentions_sum == 0] <- 1e-5)。
    • 若数值差异过大,尝试对数转换(world_map8$Mentions_log <- log(world_map8$Mentions_sum + 1))后用转换后的变量绘制cartogram。
  • 降低迭代次数:先将itermax设为3或5,排除迭代过程中累积误差导致的NA问题。
  • 去除重复几何:merge时启用了duplicateGeoms=TRUE,可能产生重复几何对象引发冲突,执行world_map8 <- dplyr::distinct(world_map8, ISO3, .keep_all = TRUE)去重后再尝试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:03:22