如何在R语言中基于矩阵生成含数据框行名的列表
解决方案
基础R实现(高效简洁)
直接利用apply()遍历矩阵的每一列,筛选出值为1的行对应的s1行名:
# 提前提取行名,避免重复计算 row_names <- rownames(s1) # 按列遍历矩阵,生成目标列表 l1 <- apply(m1, 2, function(col) row_names[col == 1])
运行后得到的结果完全符合预期:
> l1 [[1]] [1] "red" "green" "black" "white" [[2]] [1] "yellow" "orange" [[3]] [1] "green" "blue" "white"
Tidyverse风格实现
如果你习惯使用tidyverse工具链,可以用purrr::map()来完成遍历:
library(purrr) l1 <- map(seq_len(ncol(m1)), ~ rownames(s1)[m1[, .x] == 1])
问题原因说明
你之前的代码仅针对矩阵的第一列(m1[,1]),没有实现列的遍历逻辑。上面两种方法的核心都是自动遍历矩阵的所有列,对每一列重复执行你已经写好的筛选逻辑。
大数据量适配
对于大规模数据,提前提取行名(如row_names <- rownames(s1))可以减少重复计算,提升效率。基础R的apply()本身是底层优化实现,在处理大矩阵时性能表现良好。
内容的提问来源于stack exchange,提问作者lolbye
相关产品推荐
相关产品推荐

