为什么(我的)R以不同的格式显示不同的列?

时间:2012-11-15 19:27:52

标签: r number-formatting

这是一个MWE,我正在计算(在这种情况下)181个球分配到997个随机选择的不同桶中。

> 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不同的级别,但细节让我感到震惊。请帮忙!

2 个答案:

答案 0 :(得分: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列的值小于其他列,并且用科学计数法写出值更简洁。 print.deault()在显示向量或列的方式上会保持一致,因此整个col会发生变化。

正如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 :(得分:1)

更改选项scipen,使其格式相同。计算无关紧要,因为它只是一种格式。

options(scipen=9999)

运行此命令,它应该看起来都一样。

为什么是第3列?我不知道,除非您将其导出到另一个不能识别科学记数法的程序,否则它无关紧要。