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

在R中使用apply查找并输出含缺失值的矩阵对应行名及缺失位置

问题原因
  • 你写的for循环迭代条件错误:length(missing) != 0L是布尔值,仅能返回TRUE/FALSE,无法遍历列表中每个行的计算结果
  • 没有缺失值的行在missing列表中对应长度为0的空向量,你没有对这部分内容做过滤
正确实现方案

方案1:简洁向量化实现(无需循环)

直接过滤掉无缺失值的空元素即可得到你要的结果:

# 过滤所有长度大于0的元素,即存在缺失值的行
missing_result <- Filter(function(x) length(x) > 0, missing)
# 打印结果,键为行名/行号,值为对应行的缺失列位置
print(missing_result)

方案2:循环实现(符合你原本的实现思路)

遍历列表所有元素,判断存在缺失值时再打印:

# seq_along生成和missing列表长度一致的索引序列
for(i in seq_along(missing)) {
  # 判断当前行是否存在缺失值
  if(length(missing[[i]]) > 0) {
    cat("行标识:", names(missing)[i], " 缺失列位置:", missing[[i]], "\n")
  }
}
更高效率的替代方案

如果你的矩阵规模较大,完全可以不用apply遍历,直接用which的arr.ind参数直接提取所有缺失值的行列索引,再按行分组即可:

# 直接获取所有缺失值的行、列索引矩阵
na_all <- which(is.na(matrix), arr.ind = TRUE)
# 按行分组,得到每行对应的缺失列位置
missing_result <- split(na_all[, "col"], na_all[, "row"])
print(missing_result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:36:04