【发布时间】:2021-09-05 16:11:16
【问题描述】:
将稀疏的 Matrix 对象(来自 Matrix 包)转换为普通的旧 base-R 密集 matrix 对象似乎会丢失行/列名称。
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"
转换到 Matrix 没问题:
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
我知道我可以通过存储暗名称然后将它们附加到新对象来解决它(见下文),但我觉得我不应该这样做......我是否缺少透明/更好的方式进行转换,或者在进行此转换时应该不保留暗名的逻辑原因??
## workaround/hack
dn <- dimnames(m)
m2 <- as.matrix(M)
dimnames(m2) <- dn
为了澄清,我想处理 M 已经存在的情况 但 m 还没有 (即旧的 m[] <- 技巧替换 @987654332 的内容@ 而保持其属性不变似乎不起作用...)
【问题讨论】:
-
Bug 现已修复,位于
Matrixr3418。下一个版本应该包含补丁。 -
谢谢你,米凯尔。 (特别是报告)。而 Matrix 1.4-0 确实在昨天发布到了 CRAN。
标签: r matrix sparse-matrix