我想rbind 2個載體不同層次preceision的rbind不同精度等級的
r1 = rnorm(100)
r2 = rnorm(100)
rbind(round(quantile(r1),5), round(quantile(r2),2))
rbind返回四捨五入到5。我怎樣才能得到它,以顯示正確的舍入?謝謝
我想rbind 2個載體不同層次preceision的rbind不同精度等級的
r1 = rnorm(100)
r2 = rnorm(100)
rbind(round(quantile(r1),5), round(quantile(r2),2))
rbind返回四捨五入到5。我怎樣才能得到它,以顯示正確的舍入?謝謝
計算/存儲以及如何顯示是有區別的。
在的情況下計算/存儲:當您round
一個數字時,您施加的位數不會與該數字一起存儲。也就是說,一旦完成,沒有任何東西可以說明它是圓形的,它的歷史很乾淨。因此,當您存儲round(pi,2)
時,您正在存儲的浮點數大約爲3.14
。
不管有多少有效數字可能有,但是,我可以顯示儘可能多的數字,我想要的。我可以用5位數打印1e5
,用1打印pi
,我施加的數字不限於重要的數字。在你的情況下,你將四分位數四捨五入到2位數,但是如果你願意,你仍然可以用5打印它們。
您將一些四分位數舍入爲5位數,其他四位數舍入爲2位數,然後將它們集中在一個矩陣中。就R而言,它是一個2x5的浮點數矩陣;沒有關於他們曾經有多少數字或有多少數字有意義的知識,只是他們是浮點數。
看起來像你期望的第一行有5位數字,第二行有2位數字。當R顯示/打印矢量,矩陣或數據幀時,數字(例如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"
生成的矩陣顯示四捨五入到第二行中的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
因此,答案是:如果你想展示不同的控制檯檢查矩陣時,每行四捨五入的 - 你不能,但你可以確信的值符合預期。如果您想將每行的矩陣格式化爲不同類型的輸出,例如文檔中的表格,這是一個不同的問題。
這返回到它應該是什麼。你期待什麼精確的結果? – Jealie
正在強迫一個字符串出來的問題? –
user3022875,答案是否滿足您的需求? SO習慣上通過「接受」其中一個答案來排除一個問題。 – r2evans