RStudio 会话范围舍入 - options(digits=x) 被忽略
Posted
技术标签:
【中文标题】RStudio 会话范围舍入 - options(digits=x) 被忽略【英文标题】:RStudio session wide rounding - options(digits=x) is ignored 【发布时间】: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 并返回。也许他们都希望对方能解决这个问题!
【参考方案1】:
已经接受了输出就是它的样子 - 并且很容易陷入期望小数位 DP 而不是有效数字 SD 的陷阱。通过选项强制 DP 会很方便,但是由于经常需要高精度(微小的 p 值等),许多值会被空白或完全错误。
所以最好还是不要强行使用 DP,而坚持使用 SD(如果图中所示的各个向量 val 分别四舍五入可能会很好,但这是对一致性的权衡)。一切都很好。
【讨论】:
以上是关于RStudio 会话范围舍入 - options(digits=x) 被忽略的主要内容,如果未能解决你的问题,请参考以下文章
在 RStudio / Interactive R 会话中因错误而停止执行