У меня есть кадр данных, и я хочу узнать, как сводка генерирует его информацию. В частности, как суммирование генерирует подсчет количества элементов на каждом уровне фактора. Я могу использовать резюме, но я хочу узнать, как лучше работать с факторами. Когда я пытаюсь сделать резюме, я просто получаю общую информацию. Это невозможно, потому что оно находится в байтекоде?Как я могу прочитать код для summary() для фрейма данных?
ответ
Что мы видим, когда вы набираете 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.
Красиво объяснено. 'методы (class = data.frame)' также могут быть упомянуты. – Roland
попробуйте '> summary.data.frame' на консоли. – kohske
См. '? Methods' и try' methods (summary) ', который должен привести вас к' summary.data.frame', который задокументирован в '? Summary'. –
Этот Q & A еще более определен: http://stackoverflow.com/questions/19226816/how-can-i-view-the-source-code-for-a-функция –