2012-06-13 15 views
10

Bu beni şaşırtmaktır. Tamsayıların bir vektöründe özet() çalıştırdığınızda, doğru sonuçlar elde edemezsiniz. Sayılar yuvarlatılmış gibi görünüyor. Bunu farklı işletim sistemli üç farklı makinede denedim ve sonuçları aynı. bir vektör içinÖzet yöntem sonuçları, vektörler için doğru görünmüyor

:

>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 

bir data.frame için:

> 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 

Neden bu sonuçlar farklı?

+0

deneyin 'özeti (b $ b, basamak = 6) çalışır Tamam' – kohske

+0

@kohske. Bu, vektörler için varsayılan özet yönteminin data.frame'lerden farklı olduğu anlamına mı geliyor? – wahalulu

+3

@wahalulu Yöntemleri (özet) 'i deneyin ve data.frames'ın bunlarda çalıştırılan summary.data.frame' yöntemine sahip olduğunu göreceksiniz, ancak sayısallar summary.default'da bitiyor. –

cevap

1

a nesnesi integer, b sınıfında data.frame sınıfıdır. Bir data frame, belirli özelliklere ve data.frame (http://cran.r-project.org/doc/manuals/R-intro.html#Data-frames) sınıfına sahip list'dur. summary dahil olmak üzere birçok işlev, farklı sınıfların nesnelerini farklı bir şekilde ele alır (sınıfının bir nesnesine summary kullanabileceğinizi ve size tamamen farklı bir şey verebildiğini görün). Eğer b her bileşenlere fonksiyonunu summary uygulamak istiyorsanız, lapply kullanabilirsiniz:

> 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 
İlgili konular