R语言如何识别列表中全元素为0的矩阵并返回其对应索引
R语言查找矩阵列表中全零矩阵的索引
基于原有代码的修改方案
你当前的代码仅完成了单元素的零值校验,没有关联索引、也没有做全元素匹配判断,调整后代码如下:
library(R.utils) output_vec <- vector() # 用seq_along避免列表为空时的索引异常 for(i in seq_along(my_list)){ # 仅当矩阵所有元素均为0时,记录对应索引 if(all(asZero(as.vector(my_list[[i]])))){ output_vec <- c(output_vec, i) } } # 输出全零矩阵的索引,无符合条件的矩阵时返回空向量 output_vec
改动说明
- 用
seq_along(my_list)代替1:length(my_list),避免列表为空时生成错误的1:0索引 - 新增
all()判断逻辑,仅当矩阵所有元素均为0时才记录对应索引 - 符合条件的索引会被追加到结果向量
output_vec中,执行完循环后直接输出即可
更简洁的原生R实现(无第三方依赖)
不需要加载R.utils包,用原生语法即可实现相同功能,代码更精简、运行效率更高:
# 直接返回全零矩阵的索引 zero_matrix_idx <- which(sapply(my_list, function(mat) all(mat == 0))) zero_matrix_idx
如果需要同时获取校验结果和是否存在全零矩阵的判断,可扩展为:
# 每个位置的矩阵是否为全零矩阵的布尔向量 check_result <- sapply(my_list, function(mat) all(mat == 0)) # 全零矩阵的索引 zero_idx <- which(check_result) # 是否存在全零矩阵 has_zero_matrix <- any(check_result)
测试用例参考:
my_list <- list(matrix(0,2,2), matrix(1:4,2,2), matrix(0,3,3)) # 运行代码后返回的索引为 1 3
内容的提问来源于stack exchange,提问作者Mathica
相关产品推荐
相关产品推荐

