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

R语言非连续id下嵌套循环与if语句报错求助

报错原因

你在循环中错误地将id列的数值当作数据框的行索引使用,但R里数据框/向量的索引是基于行的位置序号(从1到数据框总行数,这里是6),而非id列的数值。当id取11、15、21这类大于6的值时,data$death[i]会因超出索引范围返回NA,而if语句无法处理NA的逻辑判断,因此抛出missing value where TRUE/FALSE needed错误。

解决方法

方法1:修正循环的索引逻辑

先获取两组干预对应的行位置,而非id值,再用行位置作为循环变量:

# 提取两组干预对应的行号
group1_rows <- which(data$intervention == 1)
group2_rows <- which(data$intervention == 2)

test <- c()

for (i in group1_rows) {
  for(j in group2_rows){
    if (data$death[i] < data$death[j]){
      test <- c(test, -1)
    } else if (data$death[i] > data$death[j]){
      test <- c(test, 1)
    } else {
      test <- c(test, 0)
    }
  }
}

方法2:用向量化操作替代嵌套循环(更高效)

R中嵌套循环效率较低,推荐用outer函数实现两组数据的批量比较:

# 提取两组的death值
group1_death <- data$death[data$intervention == 1]
group2_death <- data$death[data$intervention == 2]

# 批量生成比较结果并转为向量
test <- as.vector(outer(group1_death, group2_death, function(x, y) {
  ifelse(x < y, -1, ifelse(x > y, 1, 0))
}))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:20:35