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

for循环中筛选分组数据求和异常的问题排查与解决

修正按Batch分组检查RelAb和的for循环代码

需求:编写for循环,按Batch分组检查观测值的相对丰度(RelAb)之和是否为100。手动逐个检查每个Batch时,RelAb的和均为100,但编写for循环后,每次输出结果都是1100(Batches向量长度为11),需要修正循环代码。

示例数据:

BatchReadsRelAb
A12843172.94
A11054927.06
B11931585.96
B1315514.04

错误原因

两段错误代码的核心问题是:循环中没有使用当前迭代的变量i,而是每次过滤/子集化所有的Batch值,导致每次计算的是所有11个Batch的RelAb总和(11*100=1100),而不是单个Batch的和。

修正后的代码

1. dplyr::filter版本

Batches <- c("A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4", "B5", "B6", "B7")
for(i in Batches) {
  filtered.batch <- data.batch %>%
    dplyr::filter(Batch == i)  # 仅筛选当前迭代的Batch
  print(sum(filtered.batch$RelAb))
}

2. 基础R子集化版本

Batches <- c("A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4", "B5", "B6", "B7")
for(i in Batches) {
  # 修正子集逻辑:筛选当前Batch的RelAb列
  filtered.batch <- data.batch[data.batch$Batch == i, "RelAb"]
  print(sum(filtered.batch))
}

更高效的替代方案(无需for循环)

如果不需要逐个打印,直接用dplyr分组计算更简洁:

library(dplyr)
data.batch %>%
  group_by(Batch) %>%
  summarise(RelAb_sum = sum(RelAb), .groups = "drop")

这段代码会直接输出每个Batch对应的RelAb总和,无需手动循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:55:03