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

如何基于进球矩阵用循环和函数生成积分矩阵及原代码错误排查

原有代码错误原因
  • 语法规则不满足:R语言中if的判断条件必须包裹在小括号内,原代码直接写if goals1[xxx]没有加括号,属于基础语法错误,无法通过解释器检查。
  • 循环逻辑冗余且错误:每场比赛对应矩阵的一行,仅需要比较同一行的两列进球数即可,完全不需要嵌套两层循环遍历列,额外的列遍历只会让逻辑混乱。
  • 矩阵索引逻辑错误:原代码中goals1[i]、points1[j]这类写法是把二维矩阵按一维向量读取/赋值,完全没有按照「行对应比赛、列对应两支球队」的逻辑索引,取值和赋值的位置全部错位。
  • 判断条件逻辑完全错误:goals1[goals1[i]>goals1[j]]的写法是尝试从矩阵中筛选满足条件的元素,而不是判断两支球队的进球大小关系,不符合需求的判断逻辑。
符合要求的points()函数实现

采用R原生向量化操作实现,无需循环,自动适配任意行数的2列进球矩阵,支持自定义胜场积分:

points <- function(goals, win_points = 3) {
  # 参数合法性校验
  if (!is.matrix(goals) || ncol(goals) != 2) {
    stop("输入参数goals必须为固定2列的矩阵")
  }
  if (!is.numeric(win_points) || length(win_points) != 1 || win_points <= 0) {
    stop("胜场积分win_points必须为正数值")
  }
  
  # 初始化积分矩阵
  points_mat <- matrix(0, nrow = nrow(goals), ncol = 2)
  # 提取主客队进球数
  home_goals <- goals[, 1]
  away_goals <- goals[, 2]
  
  # 平局情况:两队各得1分
  draw_idx <- home_goals == away_goals
  points_mat[draw_idx, ] <- 1
  
  # 主队获胜情况:主队得胜场积分,客队0分
  home_win_idx <- home_goals > away_goals
  points_mat[home_win_idx, 1] <- win_points
  points_mat[home_win_idx, 2] <- 0
  
  # 客队获胜情况:客队得胜场积分,主队0分
  away_win_idx <- home_goals < away_goals
  points_mat[away_win_idx, 2] <- win_points
  points_mat[away_win_idx, 1] <- 0
  
  return(points_mat)
}

测试示例

set.seed(1)
# 生成5行2列的测试进球矩阵
goals1 <- matrix(sample(0:5, size = 5*2, replace = TRUE), nrow=5, ncol=2)
# 调用函数,默认胜场积3分
result_default <- points(goals1)
# 自定义胜场积2分
result_custom <- points(goals1, win_points = 2)

# 输出结果
print("测试进球矩阵:")
print(goals1)
print("胜场3分对应的积分矩阵:")
print(result_default)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:06:02