2012-06-13 29 views
10

Điều này khiến tôi khó hiểu. Khi bạn chạy tóm tắt() trên một vectơ các số nguyên bạn dường như không nhận được kết quả chính xác. Các con số dường như được làm tròn. Tôi đã thử điều này trên ba máy khác nhau với hệ điều hành khác nhau và kết quả là như nhau.Kết quả phương pháp tóm tắt dường như không chính xác đối với vectơ

Đối với một 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 

Đối với một 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 

Tại sao có những kết quả khác nhau?

+0

thử 'tóm tắt (b $ b, chữ số = 6) ' – kohske

+0

@kohske ok, mà làm việc. Điều đó có nghĩa là phương pháp tóm tắt mặc định cho vectơ khác với đối với data.frames? – wahalulu

+3

@wahalulu Hãy thử 'phương thức (tóm tắt)' và bạn sẽ thấy rằng data.frames có phương thức 'summary.data.frame' chạy trên chúng nhưng số đếm lên trong' summary.default'. –

Trả lời

1

Đối tượng a là loại integer, b là loại data.frame. A data framelist với một số thuộc tính nhất định và với lớp data.frame (http://cran.r-project.org/doc/manuals/R-intro.html#Data-frames). Nhiều chức năng, bao gồm summary, xử lý các đối tượng của các lớp khác nhau (xem bạn có thể sử dụng summary trên một đối tượng của lớp lm và nó mang lại cho bạn một cái gì đó hoàn toàn khác nhau). Nếu bạn muốn áp dụng các chức năng summary cho mọi thành phần trong b, bạn có thể sử dụng 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 
Các vấn đề liên quan