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

编写R函数计算企业评分时出现报错,求解决方案

问题排查与修正

你的代码主要存在两个核心问题,导致结果不符合预期:

1. 评分逻辑偏差

你设定的规则是每个符合条件的指标项给公司加2/6分,但原代码仅统计符合条件的项数,未乘以对应的分值(2/6),最终分数无法匹配规则要求。

2. sum函数使用不规范

原代码中sum(ifelse(...), ifelse(...))的写法,会将两个ifelse返回的向量分别求和后再相加,虽数值结果无差,但更清晰的写法是合并条件后直接统计,避免歧义。


修正后的循环版本代码

# 修正后的评分计算函数
calculate_score <- function(data) {
  # 创建存储分数的数据框
  scores <- data.frame(company = unique(data$company), score = 0)
  
  # 遍历每家公司
  for (i in 1:nrow(scores)) {
    # 获取当前公司的所有指标数据
    company_data <- data[data$company == scores$company[i], ]
    
    # 统计符合加分条件的项数,再乘以2/6得到总分
    eligible_count <- sum(
      (company_data$element_score == "Met" & company_data$status == "No Change") |
      (company_data$element_score == "Not Met" & company_data$status == "Changed")
    )
    
    scores$score[i] <- eligible_count * (2/6)
  }
  
  return(scores)
}

# 测试示例数据集(设置随机种子保证结果可复现)
set.seed(123)
df <- data.frame(
  company = rep(c("A", "B", "C", "D", "E", "F"), each = 6),
  element_score = sample(c("Met", "Not Met", "Not Applicable"), size = 36, replace = TRUE),
  status = sample(c("No Change", "Changed", "Unsure"), size = 36, replace = TRUE)
)

calculate_score(df)

更高效的dplyr分组版本(可选)

若数据集较大,使用dplyr分组计算会比循环更高效:

library(dplyr)

calculate_score_dplyr <- function(data) {
  data %>%
    group_by(company) %>%
    summarise(
      score = sum(
        (element_score == "Met" & status == "No Change") |
        (element_score == "Not Met" & status == "Changed")
      ) * (2/6)
    ) %>%
    ungroup()
}

# 测试
calculate_score_dplyr(df)

关键修正点说明

  • 用|合并两个加分条件,直接统计符合要求的指标项数
  • 项数乘以2/6,严格匹配你设定的评分规则
  • 加入set.seed(123)让随机生成的示例数据结果可复现,便于调试

内容的提问来源于stack exchange,提问作者e. erhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:35:15