2012-06-23 40 views
12

Tôi có một khung dữ liệu và tôi muốn tìm hiểu cách tóm tắt tạo ra thông tin đó. Cụ thể, làm thế nào để tóm tắt tạo ra một số đếm cho số lượng các yếu tố trong mỗi cấp độ của một yếu tố. Tôi có thể sử dụng tóm tắt, nhưng tôi muốn tìm hiểu cách làm việc với các yếu tố tốt hơn. Khi tôi thử? Tóm tắt, tôi chỉ nhận được thông tin chung. Điều này là không thể bởi vì nó nằm trong bytecode?Làm cách nào để đọc mã cho tóm tắt() cho một khung dữ liệu?

+1

thử '> summary.data.frame' trên bảng điều khiển. – kohske

+0

Xem '? Phương thức' và thử' phương thức (tóm tắt) ', sẽ dẫn bạn đến' summary.data.frame', được viết thành '? Summary'. –

+0

Câu Hỏi & Đáp này thậm chí còn dứt khoát hơn: http://stackoverflow.com/questions/19226816/how-can-i-view-the-source-code-for-a-function –

Trả lời

32

Những gì chúng ta nhìn thấy khi bạn gõ summary

> summary 
function (object, ...) 
UseMethod("summary") 
<bytecode: 0x0456f73c> 
<environment: namespace:base> 

Đây là nói cho chúng tôi tóm tắt đó là một hàm tổng quát và có nhiều phương pháp gắn liền với nó. Để xem những phương pháp này thực sự được gọi là gì, chúng tôi có thể thử

> methods(summary) 
[1] summary.aov    summary.aovlist   summary.aspell*   
[4] summary.connection  summary.data.frame  summary.Date   
[7] summary.default   summary.ecdf*   summary.factor   
[10] summary.glm    summary.infl   summary.lm    
[13] summary.loess*   summary.manova   summary.matrix   
[16] summary.mlm    summary.nls*   summary.packageStatus* 
[19] summary.PDF_Dictionary* summary.PDF_Stream*  summary.POSIXct   
[22] summary.POSIXlt   summary.ppr*   summary.prcomp*   
[25] summary.princomp*  summary.srcfile   summary.srcref   
[28] summary.stepfun   summary.stl*   summary.table   
[31] summary.tukeysmooth* 

    Non-visible functions are asterisked 

Ở đây chúng tôi thấy tất cả các phương pháp được liên kết với hàm summary. Điều này có nghĩa là có mã khác nhau khi bạn gọi tóm tắt về một đối tượng lm hơn là khi bạn gọi tóm tắt trên một data.frame. Điều này là tốt bởi vì chúng tôi sẽ không mong đợi bản tóm tắt được thực hiện theo cùng một cách cho hai đối tượng đó.

Để xem mã được chạy khi bạn gọi tóm tắt về một data.frame bạn chỉ có thể gõ

summary.data.frame 

như thể hiện trong danh sách các phương pháp. Bạn sẽ có thể kiểm tra nó và nghiên cứu nó và làm bất cứ điều gì bạn muốn với mã in. Bạn đã đề cập rằng bạn quan tâm đến các yếu tố, do đó bạn có thể muốn kiểm tra đầu ra của summary.factor. Bây giờ bạn có thể nhận thấy rằng một số phương thức được in có dấu hoa thị (*) bên cạnh chúng có nghĩa là chúng không nhìn thấy được. Điều này về cơ bản có nghĩa là bạn không thể chỉ cần gõ tên của hàm để thử xem mã.

> summary.prcomp 
Error: object 'summary.prcomp' not found 

Tuy nhiên, nếu bạn quyết tâm để xem những gì các mã thực sự là bạn có thể sử dụng chức năng getAnywhere để xem nó.

> getAnywhere(summary.prcomp) 
A single object matching ‘summary.prcomp’ was found 
It was found in the following places 
    registered S3 method for summary from namespace stats 
    namespace:stats 
with value 

function (object, ...) 
{ 
    vars <- object$sdev^2 
    vars <- vars/sum(vars) 
    importance <- rbind(`Standard deviation` = object$sdev, `Proportion of Variance` = round(vars, 
     5), `Cumulative Proportion` = round(cumsum(vars), 5)) 
    colnames(importance) <- colnames(object$rotation) 
    object$importance <- importance 
    class(object) <- "summary.prcomp" 
    object 
} 
<bytecode: 0x03e15d54> 
<environment: namespace:stats> 

Hy vọng điều này giúp bạn khám phá mã trong R dễ dàng hơn trong tương lai.

Để biết thêm chi tiết, bạn có thể xem Volume 6/4 of The R Journal (warning, pdf) và đọc phần "Bàn trợ giúp R" của Uwe Ligge liên quan đến việc xem mã nguồn của các hàm R.

+1

Được giải thích rõ ràng. 'phương thức (class = data.frame)' cũng có thể được đề cập. – Roland

Các vấn đề liên quan