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

R语言嵌套for循环追加IMC值到向量并生成分类列问题求助

问题原因
  • 你每次循环时都直接用IMC_values = c(单个计算值)覆盖了原有向量,没有实现追加效果,每次IMC_values都只有当前行的单个IMC值
  • 赋值dados$Gr_IMC = 分类值时是对整个列统一赋值,每次判断都会覆盖所有行的结果,最终整列取值等于最后一次循环对应的分类
方案1:按照你的循环逻辑修正

先初始化空的IMC向量和分类向量,循环里逐行追加,最后把分类向量赋值给数据框列即可:

# 初始化空向量
IMC_values <- c()
Gr_IMC <- c()

# 循环遍历每一行
for (j in 1:nrow(dados)) {
  # 计算当前行IMC,追加到向量末尾
  imc <- dados$Peso[j] / (dados$Altura[j]^2) * 10000
  IMC_values <- c(IMC_values, imc)
  
  # 判断分类,追加到分类向量末尾
  if (imc < 18.5) {
    gr <- "Abaixo do peso ideal"
  } else if (imc >= 18.5 && imc < 25) {
    gr <- "Peso normal"
  } else if (imc >= 25 && imc < 30) {
    gr <- "Acima do peso ideal"
  } else {
    gr <- "Obesidade"
  }
  Gr_IMC <- c(Gr_IMC, gr)
}

# 把分类向量赋值给数据框的新列
dados$Gr_IMC <- Gr_IMC
方案2:更高效的R向量化操作(推荐)

R支持直接整列计算、批量分类,不需要写嵌套循环,运行效率更高、代码更简洁:

# 直接整列计算IMC并存储到新列
dados$IMC <- dados$Peso / (dados$Altura^2) * 10000

# 用cut函数批量完成区间分类
dados$Gr_IMC <- cut(
  dados$IMC,
  breaks = c(-Inf, 18.5, 25, 30, Inf),
  labels = c("Abaixo do peso ideal", "Peso normal", "Acima do peso ideal", "Obesidade"),
  right = FALSE
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:45:07