控制R打印输出中的十进制数

控制R打印输出中的十进制数

在R中有一个选项可以控制数字显示。例如:

options(digits=10)

应该在R会话结束前以10位数给出计算结果。在R的帮助文件中,位参数的定义如下:

数字:在打印数字值时控制要打印的数字数。这只是一个建议。有效值为1...22默认7

因此,它说这只是一个建议。如果我喜欢总是显示10位数字,而不是更多或更少呢?

我的第二个问题是,如果我喜欢显示超过22位数字,也就是说,为了更精确的计算,比如100位数,该怎么办?是否可以使用基R,或者我是否需要一个额外的包/功能?

编辑:多亏了杰米的建议,我试着sprintf("%.100f",pi)它给了

[1] "3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000"

它有48个小数。这是R所能处理的最大极限吗?


九州编程
浏览 486回答 2
2回答

侃侃尔雅

之所以它只是一个建议,是因为您可以很容易地编写一个忽略选项值的打印函数。内置的打印和格式化功能确实使用options值作为默认值。至于第二个问题,因为R使用的是有限精度的算术,所以你的答案不能精确到小数点15或16位以上,所以一般不需要更多。这个GMP和rcdd包处理多个精确算术(通过与GMP库的间隔),但这主要是与大整数相关,而不是更多的小数位。数学或枫树将允许你给出你心中想要的多少小数位。编辑:考虑小数位和重要数字之间的差异可能是有用的。如果你做的统计测试依赖于第15个重要数字以外的差异,那么你的分析几乎肯定是垃圾。另一方面,如果您只是处理非常小的数字,这就不是什么问题,因为R可以处理小到.Machine$double.xmin(通常为2E-308)。比较这两种分析。x1&nbsp;<-&nbsp;rnorm(50,&nbsp;1,&nbsp;1e-15)y1&nbsp;<-&nbsp;rnorm(50,&nbsp;1&nbsp;+&nbsp;1e-15,&nbsp;1e-15)t.test(x1,&nbsp;y1)&nbsp;&nbsp; #Should&nbsp;throw&nbsp;an&nbsp;errorx2&nbsp;<-&nbsp;rnorm(50,&nbsp;0,&nbsp;1e-15)y2&nbsp;<-&nbsp;rnorm(50,&nbsp;1e-15,&nbsp;1e-15)t.test(x2,&nbsp;y2)&nbsp;&nbsp;#ok在第一种情况下,数字之间的差异只出现在许多重要数字之后,因此数据“几乎不变”。在第二种情况下,虽然数字之间的差异大小是相同的,但与数字本身的大小相比,它们是很大的。如e3bo所述,您可以使用Rmpfr包裹。mpfr("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825")它们比常规的(双精度)更慢,内存也更密集。numeric向量,但是如果你有一个条件差的问题或不稳定的算法的话,它是有用的。
打开App,查看更多内容
随时随地看视频慕课网APP