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

R语言循环报错‘argument is of length zero’:统计变量为1的次数求解决

解决R语言中"argument is of length zero"报错并实现行内计数需求

报错原因分析

  • 列名不匹配:你定义的prv_services向量用了大写列名("PRV_SERV_1"),但示例数据里的列名是小写("prv_serv_1")。如果真实数据集的列名和向量中的名称不一致,data[val, c]会返回空值,触发"argument is of length zero"错误。
  • 循环逻辑遗漏赋值:你在循环中计算了the.sum,但没有将结果赋值给data$prv_services[val],即便没有报错也无法得到预期的累计计数。
  • 变量名冲突:循环中使用c作为迭代变量,而c是R的内置函数,可能引发意外逻辑问题。

修复方案

方案1:修正循环代码

先确保prv_services中的列名和数据集data的列名完全一致,然后调整循环逻辑:

# 先确保列名匹配(示例用小写)
prv_services <- c("prv_serv_1", "prv_serv_2")
# 初始化结果列
data$prv_services_count <- NA

for (val in 1:nrow(data)) {
  the.sum <- 0
  # 改用sv作为迭代变量,避免和内置函数c冲突
  for (sv in prv_services){
    current_val <- data[val, sv]
    # 先判断是否存在该列(防止列名错误)
    if (!is.null(current_val)) {
      if (!is.na(current_val) && current_val != "D" && current_val != "R") {
        if (as.numeric(current_val) == 1) {
          the.sum <- the.sum + 1
        }
      }
    }
  }
  # 将计算结果赋值给对应行
  data$prv_services_count[val] <- the.sum
}

方案2:用rowSums高效实现(推荐)

循环在R中效率较低,推荐用rowSums结合条件判断实现需求,同时处理NA、"D"、"R"的情况:

# 先将目标列转换为数值型,同时把"D"、"R"设为NA
target_cols <- data[, prv_services]
target_cols[target_cols == "D" | target_cols == "R"] <- NA
target_cols <- as.data.frame(lapply(target_cols, as.numeric))

# 计算每行等于1的数量(自动忽略NA)
data$prv_services_count <- rowSums(target_cols == 1, na.rm = TRUE)

示例验证

用你提供的示例数据测试:

# 构建示例数据集
Services <- c("prv_serv_1", "prv_serv_2")
Patient_ID <- c("A", "B" , "C")
Obs_1 <-c(0, 1)
Obs_2 <-c(1, 1)
Obs_3 <-c(1, 0)
Services_Matrix <- rbind(Obs_1, Obs_2, Obs_3)
colnames(Services_Matrix) <- Services
rownames(Services_Matrix) <- Patient_ID
# 转换为data.frame
data <- as.data.frame(Services_Matrix)

# 用方案2测试
prv_services <- c("prv_serv_1", "prv_serv_2")
target_cols <- data[, prv_services]
target_cols <- as.data.frame(lapply(target_cols, as.numeric))
data$prv_services_count <- rowSums(target_cols == 1, na.rm = TRUE)

运行后data会新增prv_services_count列,结果为:

prv_serv_1 prv_serv_2 prv_services_count
A          0          1                  1
B          1          1                  2
C          1          0                  1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:42:42