`round()` 到 R 中的许多数字

`round()` to many digits in R

我正在使用 round() 函数,根据帮助

rounds the values in its first argument to the specified number of decimal places (default 0).

round(x, digits = 0) 中的 digits 参数是一个

integer indicating the number of decimal places (round) .

有人可以解释一下这个输出吗?因为它似乎并不像宣传的那样有效。但也许我只是忽略了一些东西。

> round(x = 234234.3456789, digits = 0)
[1] 234234
> round(x = 234234.3456789, digits = 1)
[1] 234234.3
> round(x = 234234.3456789, digits = 2)
[1] 234234.4
> round(x = 234234.3456789, digits = 3)
[1] 234234.3
> round(x = 234234.3456789, digits = 4)
[1] 234234.3
> round(x = 234234.3456789, digits = 5)
[1] 234234.3
> round(x = 234234.3456789, digits = 6)
[1] 234234.3
> round(x = 234234.3456789, digits = 7)
[1] 234234.3

我尝试更改数字,它似乎没有四舍五入到数字指示的小数位数(如图所示),而是四舍五入到参数数字指示的总位数

>     round(x = 34.3456789, digits = 0)
[1] 34
>     round(x = 34.3456789, digits = 1)
[1] 34.3
>     round(x = 34.3456789, digits = 2)
[1] 34.35
>     round(x = 34.3456789, digits = 3)
[1] 34.346
>     round(x = 34.3456789, digits = 4)
[1] 34.3457
>     round(x = 34.3456789, digits = 5)
[1] 34.34568
>     round(x = 34.3456789, digits = 6)
[1] 34.34568
>     round(x = 34.3456789, digits = 7)
[1] 34.34568

这对我来说很奇怪。但同样,也许我只是做错了什么。

试图找到一个解释,我发现 this other question here in SO 那里的一个例子似乎确实如我所料。

x <- c(pi, pi*1000, pi/1000)

> round(x, digits = 0)
[1]    3 3142    0
> round(x, digits = 1)
[1]    3.1 3141.6    0.0
> round(x, digits = 2)
[1]    3.14 3141.59    0.00
> round(x, digits = 3)
[1]    3.142 3141.593    0.003
> round(x, digits = 3)
[1]    3.142 3141.593    0.003
> round(x, digits = 4)
[1]    3.1416 3141.5927    0.0031
> round(x, digits = 5)
[1]    3.14159 3141.59265    0.00314
> round(x, digits = 6)
[1]    3.141593 3141.592654    0.003142
> round(x, digits = 7)
[1]    3.1415927 3141.5926536    0.0031416

但是当我尝试用我原来的例子做一些类似的事情时,它不起作用。实际上,类似于 x <- c(pi, pi, pi) 而不是 x <- c(pi, pi*1000, pi/1000) 的东西不起作用(注意最后两个,它不添加另一个小数位,而是总体上减少了 7 个位置)。

x <- c(pi, pi, pi)
> round(x, digits = 0)
[1] 3 3 3
> round(x, digits = 1)
[1] 3.1 3.1 3.1
> round(x, digits = 2)
[1] 3.14 3.14 3.14
> round(x, digits = 3)
[1] 3.142 3.142 3.142
> round(x, digits = 3)
[1] 3.142 3.142 3.142
> round(x, digits = 4)
[1] 3.1416 3.1416 3.1416
> round(x, digits = 5)
[1] 3.14159 3.14159 3.14159
> round(x, digits = 6)
[1] 3.141593 3.141593 3.141593
> round(x, digits = 7)
[1] 3.141593 3.141593 3.141593

我检查了对象 class 和结构,看起来是一样的。

这是怎么回事?

实际上,round 工作正常:

a <- round(x = 234234.3456789, digits = 7)
paste(a)
[1] "234234.3456789"

在您的示例中,print.default,这就是当您要求 R print 某些东西正在减少位数时发生的情况。

print.default(a, digits = 15)
[1] 234234.3456789

您可以通过 options

控制行为
options(digits = 15)
round(pi, digits = 15)
[1] 3.14159265358979