为什么summary()函数返回的最大值和max()函数不同?

6

在Windows XP上使用R-2.15.2版本时,summary()max()函数返回的最大值不同,为什么会这样呢?

下面是相关代码:

> class(dat)
[1] "data.frame"
> dim(dat)
[1] 3850   54
> summary(dat$enrol)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    26     945    1744    3044    3128  183200 
> max(dat$enrol)
[1] 183151

有任何想法为什么 summary() 会将结果四舍五入?

最好的, 奥利弗


str(dat$enrol) 的结果是什么? - Andrie
结果是:num [1:3850] 1089 1100 1011 995 1008 ... - Florian Mans
1个回答

16

这是在考虑 digits 参数的情况下打印结果的方式。默认值为

> max(3, getOption("digits")-3)
[1] 4

为什么R向上舍入只是使用中的默认规则 - 转到最近的偶数位数字。我们可以通过signif()函数看到这个过程:

> signif(183151, digits = 4)
[1] 183200

正如?summary所告诉我们的那样,summary()所使用的就是它,并由digits参数控制:

digits: integer, used for number formatting with ‘signif()’ (for
        ‘summary.default’) or ‘format()’ (for ‘summary.data.frame’).

阅读 ?signif 了解有关四舍五入问题的更多信息。

要获取更多有效数字,请通过digits参数将更高的数字传递给summary()

例如:

> set.seed(1)
> vec <- c(10, 100, 1e4, 1e5, 1e6) + runif(5)
> summary(vec)
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
     10.3     100.4   10000.0  222000.0  100000.0 1000000.0 
> summary(vec, digits = 7)
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
     10.3     100.4   10000.6  222022.5  100000.9 1000000.0 
> summary(vec, digits = 8)
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
     10.3     100.4   10000.6  222022.5  100000.9 1000000.2 

1
这非常有趣!我一直以为有效数字是指小数点后的数字... - Florian Mans
如果这个回答解决了你的问题,请考虑接受它。请参阅[FAQ]的[提问]部分,了解如何进行此操作以及为什么这很重要。 - Gavin Simpson
5
不知道是否到了该发布一个名为“所打印内容并非计算机内部存储内容”的全球常见问题解答的时候了 :-) 。 - Carl Witthoft

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接