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