使用 sprintf 舍入矩阵,同时在 R 中保留尾随零
Use sprintf to round a matrix while keeping trailing zeros in R
据我所知,如果在矩阵上使用 sprintf,它将转换为向量,return 转换为向量,在此过程中,去除行名和列名。我想将一个大矩阵四舍五入到小数点后一位,但保留尾随零。这是问题的一个小例子。
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"
有没有办法舍入一个非常大的 table,(a) 保留尾随零,(b) 不破坏 table 的结构?
我知道我可以将 sprintf 向量放回矩阵并重命名行和列,但我想知道我是否缺少更直接的解决方案。
您可以使用原始矩阵的 dim
属性来指定输出矩阵的 dim
属性:
tbl[] <- `dim<-`(sprintf("%.1f", tbl), dim(tbl))
tbl
# a b
# c "2.4" "1.0"
# d "4.0" "2.3"
注意:在将矩阵传递给 sprintf
之前 round
没有意义。
据我所知,如果在矩阵上使用 sprintf,它将转换为向量,return 转换为向量,在此过程中,去除行名和列名。我想将一个大矩阵四舍五入到小数点后一位,但保留尾随零。这是问题的一个小例子。
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"
有没有办法舍入一个非常大的 table,(a) 保留尾随零,(b) 不破坏 table 的结构?
我知道我可以将 sprintf 向量放回矩阵并重命名行和列,但我想知道我是否缺少更直接的解决方案。
您可以使用原始矩阵的 dim
属性来指定输出矩阵的 dim
属性:
tbl[] <- `dim<-`(sprintf("%.1f", tbl), dim(tbl))
tbl
# a b
# c "2.4" "1.0"
# d "4.0" "2.3"
注意:在将矩阵传递给 sprintf
之前 round
没有意义。