在R中控制打印输出的小数位数

8 浏览
0 Comments

在R中控制打印输出的小数位数

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

options(digits=10)

可以在R会话结束前以10位数字的形式显示计算结果。在R的帮助文件中,对digits参数的定义如下:

digits: 控制打印数字值时要打印的位数。

这只是一个建议。有效的值为1...22,默认为7

所以,它说这只是一个建议。如果我想始终显示10位数字,而不是多或少怎么办?

我的第二个问题是,如果我想显示超过22位数字,例如100位数字,以进行更精确的计算,是否可以使用基本的R,还是需要额外的包/函数?

编辑:感谢jmoy的建议,我尝试了sprintf("%.100f",pi),结果如下:

[1] "3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000"

它有48个小数位。这是R可以处理的最大限度吗?

0
0 Comments

在R中控制打印输出的小数位数

在R中,控制打印输出的小数位数的原因是R使用有限精度算术,超过15或16位小数的答案都不准确,所以通常不需要更多位数。然而,如果想要更多小数位数,可以使用Mathematica或Maple等软件。

另外,如果进行统计测试时依赖于超过第15位有效数字的差异,那么分析结果几乎肯定是错误的。但是,如果只是处理非常小的数字,这个问题就不太严重,因为R可以处理至小为.Machine$double.xmin(通常为2e-308)的数字。

可以通过比较以下两个分析来理解小数位数和有效数字之间的区别。在第一个分析中,数字之间的差异只在许多有效数字之后发生,因此数据“几乎恒定”。在第二个分析中,尽管数字之间的差异大小相同,但与数字本身的数量级相比,它们是很大的。

在R中,可以使用Rmpfr包使用多精度浮点数。使用Rmpfr包的示例代码如下:

mpfr("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825")

需要注意的是,使用多精度浮点数比常规(双精度)numeric向量更慢且占用更多内存,但在处理条件差的问题或不稳定的算法时很有用。

,如果需要控制打印输出的小数位数,可以使用Rmpfr包。但是,需要注意使用多精度浮点数会带来性能和内存方面的额外开销。需要根据具体情况权衡使用多少小数位数。

0
0 Comments

控制在R中打印输出的小数位数的数量

在R中控制打印输出的小数位数的数量可能会遇到以下问题:当使用R的高级函数打印输出时,没有办法强制它们打印出精确的数字。如果要自己生成输出,可以使用sprintf()函数进行控制。例如,sprintf("%.10f",0.25)指定了要格式化一个带有十位小数的浮点数(其中的%.10f表示浮点数,.10指定了十位小数)。

然而,如果打印R的常规数字,显示100位小数是没有意义的,因为使用64位双精度浮点数的最佳精度大约是16位小数(在您的系统上查看.Machine$double.eps)。剩下的位数只会是垃圾数据。

实际上,我应用了一些特殊的卡方检验,需要数百位小数才能给出准确的结果。此外,pi的小数位数有数千位。这就是我想知道是否能打印出100位或更多位小数的原因。

然而,pi具有无限位的小数;这并不意味着计算机可以存储所有这些位数。

我猜这是Mathematica比R更优越的一个场景。

你认为Mathematica存储了无限位的小数吗?

当然不是,但你可以存储尽可能多的位数,取决于你的内存。

总结起来,要在R中控制打印输出的小数位数的数量,可以使用sprintf()函数。然而,需要注意的是,如果打印R的常规数字,显示超过精度范围的位数是没有意义的。

0
0 Comments

在R中,打印输出时控制小数位数的数量是一个常见的需求。有时候我们不希望打印多余的零。

例如,如果我们有一个名为elements的向量,并想要求和sum,我们可以这样做:

elements <- c(-1e-05, -2e-04, -3e-03, -4e-02, -5e-01, -6e+00, -7e+01, -8e+02)
sum(elements)
## -876.5432

显然,最后一位数字1被截断了,理想的结果应该是-876.54321,但如果设置为固定小数位数输出选项,例如sprintf("%.10f", sum(elements)),则会生成多余的零,结果为-876.5432100000

根据这里的教程:打印小数,如果能够确定某个数值中有多少小数位数,比如在-876.54321中,有5个小数位数需要打印,那么我们可以设置format函数的一个参数如下:

decimal_length <- 5
formatC(sum(elements), format = "f", digits = decimal_length)
## -876.54321

我们可以根据每次查询来更改decimal_length,这样可以满足不同的小数位数打印要求。

0