使用sprintf来舍入矩阵,同时在R中保持尾随零

时间:2015-04-03 16:31:02

标签: r latex

据我所知,如果在矩阵上使用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向量放回矩阵并重命名行和列,但我想知道我是否错过了一个更简单的解决方案。

1 个答案:

答案 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之前没有任何意义。