据我所知,如果在矩阵上使用sprintf,它将转换为向量并返回一个向量,在此过程中,剥离行和列名称。我想将一个大矩阵舍入到一个小数位,但保持尾随零。这是一个小问题的例子。
tbl <- matrix(c(2.4, 3.97, 1.02, 2.3), 2, 2)
colnames(tbl) <- letters[1:2]
rownames(tbl) <- letters[3:4]
tbl_round <- round(tbl, digits = 1)
tbl_round
# a b
# c 2.4 1.0
# d 4.0 2.3
tbl_round[1,2]
# [1] 1
tbl_sprintf <- sprintf("%.1f", round(tbl, 1))
tbl_sprintf
# [1] "2.4" "4.0" "1.0" "2.3"
tbl_sprintf[3]
# [1] "1.0"
有没有办法围绕一个非常大的表,(a)保持尾随零和(b)不破坏表的结构?
我知道我可以将sprintf向量放回矩阵并重命名行和列,但我想知道我是否错过了一个更简单的解决方案。
答案 0 :(得分:2)
您可以使用原始矩阵的dim
属性来指定输出矩阵的dim
属性:
tbl[] <- `dim<-`(sprintf("%.1f", tbl), dim(tbl))
tbl
# a b
# c "2.4" "1.0"
# d "4.0" "2.3"
注意:round
将矩阵传递给sprintf
之前没有任何意义。