将来自Matrix包的稀疏Matrix对象转换为传统的基础R密集矩阵对象似乎会丢失行/列名称。
m <- matrix(0, 3,3, dimnames = list(LETTERS[1:3], LETTERS[1:3]))
dimnames(m)
## [[1]]
## [1] "A" "B" "C"
##
## [[2]]
## [1] "A" "B" "C"
将转换为矩阵
很容易:
dimnames(M <- Matrix::Matrix(m))
## [[1]]
## [1] "A" "B" "C"
## [[2]]
## [1] "A" "B" "C"
但是转换回去似乎会丢失行/列名称:
dimnames(as.matrix(M))
## NULL
dimnames(as(M, "matrix"))
## NULL
我知道我可以通过存储dimnames然后将它们附加到新对象来解决这个问题(见下文),但我觉得我不应该这样做...我是否忽略了使转换透明/更好的方法?或者在进行此转换时不保留dimnames的逻辑原因是什么?
## workaround/hack
dn <- dimnames(m)
m2 <- as.matrix(M)
dimnames(m2) <- dn
为了澄清,我想处理这样一种情况:已经定义了M
,但是m
没有(即旧的m[] <-
替换m
的内容,同时保留其属性的技巧似乎不起作用...)
Matrix
r3418中。下一个版本应该包含这个补丁。 - Mikael Jagan