2

这是一个 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 不同的类,但细节让我无法理解。请帮忙!

4

2 回答 2

3

您正在运行一个返回矩阵的函数。为了显示一个矩阵,print.default()被调用。它试图找到一种好的(简洁的)方式来表示每列中的值,同时考虑到 R 的全局选项

如果您键入options()or ?options,您将看到全局选项包括多个显示和打印设置。一种是digits,它控制打印数值时要打印的有效位数。另一个是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/

于 2012-11-18T18:22:06.607 回答
1

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

options(scipen=9999)

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

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

于 2012-11-15T19:31:43.247 回答