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

如何在R语言for循环中正确使用subset()计算鸢尾花数据集均值

问题解决方法:for循环计算iris分组Petal.Length均值

你的循环代码存在逻辑错误,导致每次都计算了整个数据集的均值,具体问题和修正方案如下:

错误原因

循环里的筛选条件Species==levels(Species)有问题:levels(Species)会返回iris$Species的所有水平向量(即c("setosa", "versicolor", "virginica")),R会对每一行的Species值做循环补齐对比——只要该行值匹配任意一个水平就返回TRUE,最终会选中iris的所有行,所以每次计算的都是全局均值,结果全部相同。

修正后的代码

方法1:按索引循环水平

保留你初始的向量初始化方式,修改循环内的筛选条件,每次取对应索引的物种水平:

medie <- rep(NA,3)
names(medie) <- levels(iris$Species)

for (i in 1:length(medie)){
    # 提取当前循环对应的物种水平
    current_sp <- levels(iris$Species)[i]
    # 筛选对应物种的行,计算Petal.Length均值
    medie[i] <- mean(subset(iris, Species == current_sp)$Petal.Length)
}

方法2:直接循环物种水平(更直观)

不需要提前初始化向量长度,直接按物种名称赋值:

medie <- c()
for (sp in levels(iris$Species)){
    medie[sp] <- mean(subset(iris, Species == sp)$Petal.Length)
}

正确结果验证

运行修正后的代码,会得到各物种分组的真实均值:

> medie
    setosa versicolor  virginica 
     1.462      4.260      5.552

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:35:17