为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

九州编程 2019-08-03 03:03:18
控制R打印输出中的十进制数在R中有一个选项可以控制数字显示。例如:options(digits=10)应该在R会话结束前以10位数给出计算结果。在R的帮助文件中,位参数的定义如下:数字:在打印数字值时控制要打印的数字数。这只是一个建议。有效值为1...22默认7因此,它说这只是一个建议。如果我喜欢总是显示10位数字,而不是更多或更少呢?我的第二个问题是,如果我喜欢显示超过22位数字,也就是说,为了更精确的计算,比如100位数,该怎么办?是否可以使用基R,或者我是否需要一个额外的包/功能?编辑:多亏了杰米的建议,我试着sprintf("%.100f",pi)它给了[1] "3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000"它有48个小数。这是R所能处理的最大极限吗?
查看完整描述

2 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

之所以它只是一个建议,是因为您可以很容易地编写一个忽略选项值的打印函数。内置的打印和格式化功能确实使用options值作为默认值。

至于第二个问题,因为R使用的是有限精度的算术,所以你的答案不能精确到小数点15或16位以上,所以一般不需要更多。这个GMPrcdd包处理多个精确算术(通过与GMP库的间隔),但这主要是与大整数相关,而不是更多的小数位。

数学枫树将允许你给出你心中想要的多少小数位。

编辑:
考虑小数位和重要数字之间的差异可能是有用的。如果你做的统计测试依赖于第15个重要数字以外的差异,那么你的分析几乎肯定是垃圾。

另一方面,如果您只是处理非常小的数字,这就不是什么问题,因为R可以处理小到.Machine$double.xmin(通常为2E-308)。

比较这两种分析。

x1 <- rnorm(50, 1, 1e-15)y1 <- rnorm(50, 1 + 1e-15, 1e-15)t.test(x1, y1)  
#Should throw an errorx2 <- rnorm(50, 0, 1e-15)y2 <- rnorm(50, 1e-15, 1e-15)t.test(x2, y2)  #ok

在第一种情况下,数字之间的差异只出现在许多重要数字之后,因此数据“几乎不变”。在第二种情况下,虽然数字之间的差异大小是相同的,但与数字本身的大小相比,它们是很大的。


如e3bo所述,您可以使用Rmpfr包裹。

mpfr("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825")

它们比常规的(双精度)更慢,内存也更密集。numeric向量,但是如果你有一个条件差的问题或不稳定的算法的话,它是有用的。



查看完整回答
反对 回复 2019-08-05
  • 2 回答
  • 0 关注
  • 485 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信