如何在保留行名的前提下将R语言矩阵拆分为列表?
问题
我有一个带有行名的矩阵,代码如下:
mat1.data <- c(1,2,3,4,5,6) mat1 <- matrix(mat1.data,nrow=3,ncol=2,byrow=TRUE) rownames(mat1) <- c("a", "b", "c") colnames(mat1) <- c("t1", "t2")
期望得到的结果如下:
$t1 a b c #需要保留行名 1 3 5 $t2 a b c 2 4 6
请问该如何实现?
解决方案
方法一:转数据框再转列表
这是最简洁的实现方式,先将矩阵转置,再转为数据框,最后直接转为列表,会自动保留行名和列名作为列表的元素名称:
result <- as.list(as.data.frame(t(mat1)))
运行后输出结果:
$t1 a b c 1 3 5 $t2 a b c 2 4 6
方法二:用apply按列处理
如果需要更灵活的自定义操作,可以用apply遍历矩阵的每一列,手动为每个列向量添加行名,再转为列表:
# 按列遍历矩阵,为每个列向量设置行名 col_list <- apply(mat1, 2, function(col) { names(col) <- rownames(mat1) col }) # 将结果转为列表 result <- as.list(col_list)
该方法同样能得到你想要的格式。
内容的提问来源于stack exchange,提问作者cliu
相关产品推荐
相关产品推荐

