如何在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
相关产品推荐
相关产品推荐

