2012-06-13 10 views
10

Esto me deja perplejo. Cuando ejecuta summary() en un vector de enteros, parece que no obtiene resultados precisos. Los números parecen estar redondeados. Intenté esto en tres máquinas diferentes con diferentes sistemas operativos y los resultados son los mismos.Los resultados del método de resumen no parecen ser precisos para los vectores

Para un vector:

>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 

Para una hoja.de.datos:

> 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 

¿Por qué estos resultados diferentes?

+0

intento 'resumen (b $ b, dígitos = 6)' – kohske

+0

@kohske bien, que funciona. ¿Eso significa que el método de resumen predeterminado para vectores es diferente que para data.frames? – wahalulu

+3

@wahalulu Pruebe 'methods (summary)' y verá que los data.frames tienen el método 'summary.data.frame' ejecutado en ellos, pero los números terminan en' summary.default'. –

Respuesta

1

El objeto a es la clase integer, b es la clase data.frame. Un data frame es un list con ciertas propiedades y con la clase data.frame (http://cran.r-project.org/doc/manuals/R-intro.html#Data-frames). Muchas funciones, incluyendo summary, manejan objetos de diferentes clases de manera diferente (vea que puede usar summary en un objeto de la clase lm y le da algo completamente diferente). Si desea aplicar la función a cada summary componentes en b, podría utilizar 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 
Cuestiones relacionadas