【发布时间】:2018-06-23 11:17:48
【问题描述】:
如何让 RStudio(可能是底层的 R)在整个会话中坚持舍入 x 小数位?
options(scipen=999)
options(digits=4)
options()['digits'] # does return $digits [1] 4
p <- dbinom(x=0:10, size=10, prob=0.1)
p
#> [1] 0.3486784401 0.3874204890 0.1937102445 0.0573956280 0.0111602610 0.0014880348 0.0001377810 0.0000087480 0.0000003645 0.0000000090
#> [11] 0.0000000001
scipen 可以正常工作(清除科学记数法),但数字......不是。清除/重新启动会话和工作区没有任何区别,尽管运行了上述内容,但它仍然停留在那个长格式输出上,这对于临时的 in-the-head 计算来说是很糟糕的。我不想用数百个不必要的round() 语句堵塞代码,尤其是当存在解决该问题的数字时。
奇怪的是,工作区中的 p 变量确实显示了 4DP 舍入值!但这不好,我们需要在控制台上使用它们!
已在 x64 上更新到最新的 RStudio 1.1.383(R 也是新的 3.4.3),但仍然没有乐趣。
我一定遗漏了一些东西,但看不到什么 - 有人知道它为什么不粘住吗?
【问题讨论】:
-
来自帮助:它提到了打印数值时要打印的 "significant 数字。这只是一个建议。" ,而不是实际数字。您的小数字需要超过 4 位数字来表示它们。
p[1:4]按您的预期工作。 -
您当然是对的@user20650 - 实际上,当值在该范围内(以及其他代码上)时,它确实会显示正确的舍入。奇怪的是,当实际 val 0.00000001 等时,我已经看到它将其他函数舍入到 0.0000,但在这种情况下不是。我仍然想确保全面显示指定的 sig digs,也许有人知道怎么做?
-
如果您希望到处都有 4 个或更多有效数字,请使用
sprintf("%.13f", dbinom(x=0:10, size=10, prob=0.1))。除非您强制,否则 R 不会打印尾随零。 -
顺便说一句,这完全是一个 R 问题,与 RStudio 无关。它只是一个前端,向 R 提交代码并显示输出。
-
sprintf 用于 C 函数的包装器确实很有用@user2554330,尽管我自然想避免像 round() 那样必须包装每个调用 - 这似乎没有必要。也感谢您的提醒 - 是的,我看到 RStudio 实际上只是将代码传递给 R 并返回。也许他们都希望对方能解决这个问题!
标签: r