R语言中去除重复元素组合后如何返回单行矩阵?原因是什么?
问题解答:矩阵去重后保留单行矩阵结构
为什么返回向量而非矩阵?
R中使用[对矩阵进行行索引时,默认启用drop=TRUE参数。当索引结果仅包含一行时,该参数会自动将矩阵降维为向量,以此简化后续的数值计算;只有当索引结果包含多行时,才会保持原有的矩阵结构。这就是你遇到单行结果变向量、多行结果仍为矩阵的原因。
如何获取仅含一行的矩阵?
有两种简单的解决方式:
方法1:索引时添加drop=FALSE参数
在索引操作中显式设置drop=FALSE,强制R保留矩阵的维度结构:
m <- cbind(c("A", "B"), c("B", "A")) # 添加drop=FALSE m[!duplicated(t(apply(m, 1, sort))), , drop = FALSE]
执行后会得到预期的单行矩阵:
[,1] [,2] [1,] "A" "B"
方法2:手动构造矩阵
如果已经得到了降维后的向量,可以用matrix()函数指定行数和列数,将其转换为单行矩阵:
m <- cbind(c("A", "B"), c("B", "A")) result_vec <- m[!duplicated(t(apply(m, 1, sort))), ] # 指定nrow=1,ncol=2构造矩阵 matrix(result_vec, nrow = 1, ncol = 2)
该方法同样能输出符合要求的单行矩阵。
内容的提问来源于stack exchange,提问作者SchlaWiener
相关产品推荐
相关产品推荐

