这令我感到困惑。当您对整数向量运行summary()时,您似乎无法获得准确的结果。这些数字似乎已圆满了。我在具有不同操作系统的三台不同机器上尝试了这一点,结果是一样的。
对于矢量:
>a <- 0:628846
>str(a)
int [1:628847] 0 1 2 3 4 5 6 7 8 9 ...
>summary(a)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0 157200 314400 314400 471600 628800
>max(a)
[1] 628846
对于data.frame:
> b <- data.frame(b = 0:628846)
> str(b)
'data.frame': 628847 obs. of 1 variable:
$ b: int 0 1 2 3 4 5 6 7 8 9 ...
> summary(b)
b
Min. : 0
1st Qu.:157212
Median :314423
Mean :314423
3rd Qu.:471635
Max. :628846
> summary(b$b)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0 157200 314400 314400 471600 628800
为什么这些结果不同?
答案 0 :(得分:1)
对象a
是类integer
,b
是类data.frame
。 data frame
是具有特定属性且类list
(http://cran.r-project.org/doc/manuals/R-intro.html#Data-frames)的data.frame
。许多函数(包括summary
)以不同方式处理不同类的对象(请参阅您可以在类summary
的对象上使用lm
,它会为您提供完全不同的对象)。如果您要将功能summary
应用于b
中的每个组件,您可以使用lapply
:
> a <- 0:628846
> b <- data.frame(b = 0:628846)
> class(a)
[1] "integer"
> class(b)
[1] "data.frame"
> names(b)
[1] "b"
> length(b)
[1] 1
> summary(b[[1]]) # b[[1]] gives the first component of the list b
Min. 1st Qu. Median Mean 3rd Qu. Max.
0 157200 314400 314400 471600 628800
> class(b$b)
[1] "integer"
> summary(b$b)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0 157200 314400 314400 471600 628800
> lapply(b,summary)
$b
Min. 1st Qu. Median Mean 3rd Qu. Max.
0 157200 314400 314400 471600 628800
>
> # example of summary on a linear model
> x <- rnorm(100)
> y <- x + rnorm(100)
> my.lm <- lm(y~x)
> class(my.lm)
[1] "lm"
> summary(my.lm)
Call:
lm(formula = y ~ x)
Residuals:
Min 1Q Median 3Q Max
-2.6847 -0.5460 0.1175 0.6610 2.2976
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.04122 0.09736 0.423 0.673
x 1.14790 0.09514 12.066 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.9735 on 98 degrees of freedom
Multiple R-squared: 0.5977, Adjusted R-squared: 0.5936
F-statistic: 145.6 on 1 and 98 DF, p-value: < 2.2e-16