我想要使用不同级别的先行词来判断2个向量
r1 = rnorm(100)
r2 = rnorm(100)
rbind(round(quantile(r1),5), round(quantile(r2),2))
rbind将舍入返回到5.如何才能显示正确的舍入?谢谢
答案 0 :(得分:1)
结果矩阵在第二行中显示四舍五入为5,但该行的值实际上舍入为2.您可以通过自行检查第二行来看到这一点。
set.seed(123)
m1 <- rbind(round(quantile(rnorm(10)), 5),
round(quantile(rnorm(10)), 2))
m1
0% 25% 50% 75% 100%
[1,] -1.26506 -0.53177 -0.07983 0.37801 1.71506
[2,] -1.97000 -0.33000 0.38000 0.65000 1.79000
m1[2, ]
0% 25% 50% 75% 100%
-1.97 -0.33 0.38 0.65 1.79
所以答案是:如果你想在控制台中检查矩阵时每行显示不同级别的舍入 - 你不能,但你可以确信这些值是预期的。如果要将每行的矩阵格式化为不同类型的输出,例如文档中的表,则这是一个不同的问题。
答案 1 :(得分:1)
计算/存储的数字与的显示方式之间存在差异。
在计算/存储的情况下:当您round
一个数字时,您所施加的位数不会与该数字一起存储。也就是说,一旦round
完成,没有任何东西可以说它是圆形的,它的历史是干净的。因此,当您存储round(pi,2)
时,您存储的浮点数大约为3.14
。
无论数字有多少有效数字,我都可以显示我想要的数字。我可以打印1e5
5位数字和pi
打印1,我施加的数字不限于重要数字。在您的情况下,您将四分位数舍入为2位数,但如果您选择,仍然可以用5打印它们。
您将一些四分位数舍入为5位数,将其他四分位数舍入为2位数,然后将它们组合成一个矩阵。就R而言,它是一个2x5的浮点数矩阵;不知道他们曾经拥有多少位数或有多少位数是显着的,只是它们是浮点数。
好像你希望第一行有5位数,第二行有2位数。当R显示/打印矢量,矩阵或data.frame时,数字(例如,使用options(digits=22)
设置)用于显示整个对象,而不是一次显示一行。
您可能正在寻找的是您的数字的特定文字表示。我建议如果你想让它们像行代码那样面向行,你可能会更好:
set.seed(2)
r1 = rnorm(100)
r2 = rnorm(100)
mtx = rbind(quantile(r1), quantile(r2)) # with or without rounding
options(digits=6)
mtx
# 0% 25% 50% 75% 100%
# [1,] -2.45171 -0.855833 -0.140224 0.813804 2.09082
# [2,] -2.09923 -0.793072 0.122728 0.751018 2.11007
t(mapply(function(r,n) sprintf(sprintf("%%0.%df", n), r[[1]]),
apply(mtx, 1, list), # converts mtx to list of rows, hackish
list(5, 2) # the num of digits for each row
))
# [,1] [,2] [,3] [,4] [,5]
# [1,] "-2.45171" "-0.85583" "-0.14022" "0.81380" "2.09082"
# [2,] "-2.10" "-0.79" "0.12" "0.75" "2.11"