这是一个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不同的级别,但细节让我感到震惊。请帮忙!
答案 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
答案 1 :(得分:1)
更改选项scipen
,使其格式相同。计算无关紧要,因为它只是一种格式。
options(scipen=9999)
运行此命令,它应该看起来都一样。
为什么是第3列?我不知道,除非您将其导出到另一个不能识别科学记数法的程序,否则它无关紧要。