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

时间:2016-03-28 11:50:20

标签: r rounding

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

  

将第一个参数中的值舍入为指定的数字   小数位数(默认为0)。

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

  

表示小数位数的整数(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

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

这里发生了什么?

1 个答案:

答案 0 :(得分:1)

实际上,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