2012-06-23 1 views
12

У меня есть кадр данных, и я хочу узнать, как сводка генерирует его информацию. В частности, как суммирование генерирует подсчет количества элементов на каждом уровне фактора. Я могу использовать резюме, но я хочу узнать, как лучше работать с факторами. Когда я пытаюсь сделать резюме, я просто получаю общую информацию. Это невозможно, потому что оно находится в байтекоде?Как я могу прочитать код для summary() для фрейма данных?

+1

попробуйте '> summary.data.frame' на консоли. – kohske

+0

См. '? Methods' и try' methods (summary) ', который должен привести вас к' summary.data.frame', который задокументирован в '? Summary'. –

+0

Этот Q & A еще более определен: http://stackoverflow.com/questions/19226816/how-can-i-view-the-source-code-for-a-функция –

ответ

32

Что мы видим, когда вы набираете summary является

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

Это говорит о том, что резюме является общей функцией и имеет множество методов, прикрепленных к нему. Для того, чтобы увидеть, что те методы, которые на самом деле называется, мы можем попробовать

> 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 

Здесь мы видим, все методы, связанные с функцией summary. Это означает, что существует другой код, когда вы вызываете summary на объекте lm, чем когда вы вызываете сводку на data.frame. Это хорошо, потому что мы не ожидаем, что сводка будет вестись одинаково для этих двух объектов.

Чтобы увидеть код, который запускается при вызове резюме на data.frame вы можете просто ввести

summary.data.frame 

, как показано в списке методов. Вы сможете изучить его и изучить и сделать все, что хотите, с напечатанным кодом. Вы упомянули, что вас интересуют факторы, поэтому вы, вероятно, захотите изучить выход summary.factor. Теперь вы можете заметить, что некоторые из напечатанных методов имели звездочку (*) рядом с ними, что означает, что они невидимы. Это по существу означает, что вы не можете просто ввести имя функции, чтобы попытаться просмотреть код.

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

Однако, если вы решили посмотреть, что код на самом деле вы можете использовать функцию getAnywhere для его просмотра.

> 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> 

Надеемся, что это поможет вам быстрее изучить код в R.

Для получения более подробной информации вы можете просмотреть Volume 6/4 of The R Journal (warning, pdf) и прочитать раздел справки «R Help Desk» в Uwe Ligge, посвященный просмотру исходного кода функций R.

+1

Красиво объяснено. 'методы (class = data.frame)' также могут быть упомянуты. – Roland