2012-11-15 95 views
2

這裏是一個MWE,我正在計算181個球(在本例中)隨機選擇的997個不同桶的分佈。(my)R爲什麼顯示不同格式的不同列?

> hthord 
function(tprs=100,lower=0,upper=5,limits=0.95,ords=997){ 
    p = dbinom(seq(lower,upper,),size=tprs,prob=1/ords) 
    ll = qnorm(0.5*(1+limits)) 
    pe = ords*p 
    pl = pe - ll*sqrt(ords*p*(1-p)) 
    pu = pe + ll*sqrt(ords*p*(1-p)) 
    cbind(seq(lower,upper),pl,pe,pu,deparse.level=0) 
} 

> hthord(181) 
    [,1]   [,2]   [,3]  [,4] 
[1,] 0 808.37129927 8.314033e+02 854.4353567 
[2,] 1 128.89727212 1.510884e+02 173.2794395 
[3,] 2 6.46037329 1.365256e+01 20.8447512 
[4,] 3 -0.95391946 8.178744e-01 2.5896682 
[5,] 4 -0.33811535 3.654158e-02 0.4111985 
[6,] 5 -0.06933517 1.298767e-03 0.0719327 
> 

任何人都可以解釋爲什麼列[,3],只有,以指數表示法?

它發生在我身上,pl和pu被強制轉換成與pe不同的類別,但細節讓我難以置信。請幫忙!

回答

3

您正在運行一個返回矩陣的函數。要顯示矩陣,將調用print.default()。它試圖找到一個很好(簡潔)的方式來表示每列中的值,同時考慮到R的全局選項

如果您鍵入options()?options,您會看到全局選項包括多個顯示和打印設置。一個是數字,它控制打印數字值時要打印的有效位數。另一種是scipen,簡稱「科學(符號)罰款」,這help(options)解釋是:

scipen: integer. A penalty to be applied when deciding to print numeric values 
     in fixed or exponential notation. Positive values bias towards fixed 
     and negative towards scientific notation: fixed notation will be 
     preferred unless it is more than scipen digits wider." 

在你的情況,第3列具有較小的值比其他的cols和原來更加簡潔,以用科學記數法寫出價值。 print.deault()在顯示矢量或列方面將保持一致,因此整個列都會變化。

正如pedrosaurio所述,您可以將scipen設置爲非常高的值,並確保您永遠不會看到科學記數法。

你可以玩的設置,實踐學習:

> op <- options() # store current settings 

> options("digits","scipen") 
$digits 
[1] 7 

$scipen 
[1] 0 

> print(pi); print(1e5) 
[1] 3.141593 
[1] 1e+05 
> print(c(pi, 1e5)) # uses consistent format for whole vector 
[1] 3.141593e+00 1.000000e+05 

> options(digits = 15) 
> print(pi) 
[1] 3.14159265358979 
> options(digits = 5) 
> print(pi) 
[1] 3.1416 

> print(pi/100000); print(1e5) 
[1] 3.1416e-05 
[1] 1e+05 
> options(scipen=3) #set scientific notation penalty 
> print(pi/100000); print(1e5) 
[1] 0.000031416 
[1] 100000 

> options(op)  # reset (all) initial options 

參見:stackoverflow.com/questions/9397664/

1

更改選項scipen,使其格式相同。計算無關緊要,因爲它只是一種格式。

options(scipen=9999) 

運行此命令,它應該看起來都一樣。

爲什麼是第3列?我不知道,除非您將它導出到另一個不承認科學記數法的程序,否則這不應該成問題。

+2

print.default叫,並試圖找到一種簡潔的方式來表示列中的值3,其範圍比其他地區更廣。這在這裏進一步解釋。 http://stackoverflow.com/questions/9397664/force-r-not-to-use-exponential-notation-e-g-e10 – MattBagg

+0

@ mb3041023:謝謝。這是第3列最後一項的小數值。如果你想把它作爲答案,我會很高興爲你提供一些SE-Karma。 –

相關問題