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

R语言绘制等值线图时inSide函数报错:非数值参数参与二元运算

R语言等值线图绘制:inSide函数报错排查与修复

问题背景

参考相关代码绘制等值线图时,将原代码中的date替换为latitude后,执行ctd_mba_bound <- ctd_mba[inSide(bounding_box_list, v, w),]语句报错:

Error in min(c(bnd$x, bnd$y), na.rm = TRUE) - 1 : non-numeric argument to binary operator

已通过str()确认ctd_mba的参数为数值型。

关键代码片段

# 创建边界框
left <- ctd[ctd$latitude == min(ctd$latitude),] %>% 
  select(-temperature) %>% 
  ungroup() %>% 
  mutate(latitude = latitude-0.01)
bottom <- ctd %>%
  group_by(latitude) %>% 
  summarise(depth = min(depth)) %>% 
  mutate(depth = depth-0.01)
right <- ctd[ctd$latitude == max(ctd$latitude),] %>% 
  select(-temperature) %>% 
  ungroup() %>% 
  mutate(latitude = latitude+0.01)
top <- ctd %>%
  group_by(latitude) %>% 
  summarise(depth = max(depth)) %>% 
  mutate(depth = depth+0.01)

# 筛选边界内的像素
bounding_box_list <- list(bounding_box)
names(bounding_box_list[[1]]) <- c("v","w")
v <- ctd_mba$latitude
w <- ctd_mba$depth
ctd_mba_bound <- ctd_mba[inSide(bounding_box_list, v, w),]

错误原因

  1. 边界框未完整构建:代码仅定义了left、bottom、right、top四个边界段,但未将它们按闭合多边形的顺序拼接为完整的bounding_box对象,导致传入inSide的边界框无效。
  2. 列名不匹配函数要求:inSide(来自mba包)要求边界框数据框必须包含x和y列,你将列名改为v和w后,函数无法识别有效坐标列,进而触发非数值参数错误。

修正方案

步骤1:构建闭合边界框

将四个边界段按顶部→右侧→底部→左侧的顺序拼接,形成闭合多边形,并统一列名为x和y(对应latitude和depth):

# 拼接成闭合的边界框多边形
bounding_box <- rbind(top, right, bottom, left)
# 统一列名为inSide要求的x(纬度)和y(深度)
colnames(bounding_box) <- c("x", "y")

步骤2:正确调用inSide函数

使用符合要求的列名构建边界框列表,再传入坐标进行筛选:

# 构建边界框列表
bounding_box_list <- list(bounding_box)
# 提取待判断的坐标(对应x和y)
x <- ctd_mba$latitude
y <- ctd_mba$depth
# 筛选边界内的点
ctd_mba_bound <- ctd_mba[inSide(bounding_box_list, x, y), ]

额外检查

执行修正代码前,可通过str(bounding_box)确认x和y列均为数值型,避免因数据类型异常导致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:37:44