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

R语言expand.grid坐标组合结果逐行求x最大值与y最小值方法

实现思路与代码方案

核心逻辑

  • 你生成的组合表每一列对应一组(x,y)坐标的二选一结果,首先需要提前记录4组各自的x、y固定取值,用于判断每行每个元素属于x集合还是y集合
  • 逐行筛选出所有x类元素取最大值,所有y类元素取最小值,作为新列追加到结果表即可

修改后的可运行代码

intervals <- function(x1,y1,x2,y2,x3,y3,x4,y4){
  # 存储4组各自的x、y对照值
  group_ref <- list(
    c(x = x1, y = y1),
    c(x = x2, y = y2),
    c(x = x3, y = y3),
    c(x = x4, y = y4)
  )
  # 生成所有组合
  res_df <- expand.grid(a = group_ref[[1]], b = group_ref[[2]], c = group_ref[[3]], d = group_ref[[4]])
  
  # 逐行计算x最大值
  res_df$x_max <- apply(res_df, 1, function(row_item) {
    x_list <- c()
    for (idx in 1:4) {
      if (row_item[idx] == group_ref[[idx]]["x"]) x_list <- c(x_list, row_item[idx])
    }
    max(x_list)
  })
  
  # 逐行计算y最小值
  res_df$y_min <- apply(res_df, 1, function(row_item) {
    y_list <- c()
    for (idx in 1:4) {
      if (row_item[idx] == group_ref[[idx]]["y"]) y_list <- c(y_list, row_item[idx])
    }
    min(y_list)
  })
  
  return(res_df)
}

# 测试调用
intervals(2,10,3,90,6,50,82,7)

结果验证

运行上述代码后,你提到的第2行结果会输出x_max=82、y_min=10,完全符合你的计算要求。如果需要更高的运行效率,也可以替换apply循环为向量化运算实现,上述写法逻辑清晰方便理解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:24:01