Подтвердить что ты не робот

Как я могу прочитать исходный код функции R?

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

4b9b3361

Ответ 1

То, что мы видим при вводе 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.

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