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

如何在R语言BMI计算函数中输出BMI超25人群的体重

解决R语言函数关联BMI与对应体重的问题

嘿,我来帮你搞定这个问题!你现在的函数已经能顺利算出BMI了,但要提取BMI超过25的对应体重,核心是要利用R中向量位置一一对应的特性——你的heights_in_cms和weights_in_kg是按顺序匹配的,它们的索引是完全对齐的,只要抓住这一点就能轻松建立关联。

先说说你当前代码的问题

你现在的for循环只是逐个遍历BMI值,但没有把这些值和对应的体重位置挂钩,所以只能输出超标的BMI数值,没法拿到对应的体重。我们需要把BMI的条件判断和体重的索引绑定起来。

解决方案:用逻辑下标直接筛选

这是R里最简洁高效的方式,直接利用向量的位置对应关系筛选:

heights_in_cms <- c(180, 165, 160, 193)
weights_in_kg <- c(87, 58, 65, 100)

bmi_calc <- function(h, w) {
  # 计算完整的BMI向量
  bmi <- w / (h / 100)^2
  cat("BMIs are:", round(bmi, 2), "\n")
  
  # 生成逻辑索引:标记哪些位置的BMI超过25
  is_overweight <- bmi > 25
  
  # 用逻辑索引筛选对应体重
  overweight_weights <- w[is_overweight]
  
  cat("BMI超过25的人群体重为:", overweight_weights, "\n")
  
  # 可选:返回结果列表,方便后续调用
  return(list(all_bmi = bmi, overweight_weights = overweight_weights))
}

# 调用函数
bmi_seq <- bmi_calc(heights_in_cms, weights_in_kg)

运行这段代码会输出:

BMIs are: 26.85 21.13 25.39 26.9 
BMI超过25的人群体重为: 87 65 100 

另一种方式:用索引遍历(如果偏好循环逻辑)

如果你习惯用循环实现,也可以遍历向量的索引,通过索引同时关联BMI和体重:

bmi_calc <- function(h, w) {
  bmi <- w / (h / 100)^2
  cat("BMIs are:", round(bmi, 2), "\n")
  
  cat("BMI超过25的人群体重为: ")
  # 遍历每个元素的索引
  for (i in seq_along(bmi)) {
    if (bmi[i] > 25) {
      # 通过索引i获取对应体重
      cat(w[i], " ")
    }
  }
  cat("\n")
}

核心逻辑总结

不管用哪种方法,本质都是利用向量的位置对应关系:只要两个向量是按相同顺序存储的(比如第1个身高对应第1个体重),它们的索引就是一一匹配的。用BMI的条件生成索引(逻辑索引或数字索引),就能精准提取到对应位置的体重。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:12:57