如何读取数据框的summary()代码?

Ed *_*ine 13 r r-faq

我有一个数据框,我想了解摘要如何生成它的信息.具体而言,汇总如何生成因子的每个级别中的元素数量的计数.我可以使用摘要,但我想学习如何更好地处理因素.当我尝试?摘要时,我只是得到一般信息.这是不可能的,因为它是字节码?

Das*_*son 34

我们在您输入时看到的summary

> summary
function (object, ...) 
UseMethod("summary")
<bytecode: 0x0456f73c>
<environment: namespace:base>
Run Code Online (Sandbox Code Playgroud)

这告诉我们摘要是一个通用函数,并附加了许多方法.要查看实际调用这些方法的内容,我们可以尝试

> 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
Run Code Online (Sandbox Code Playgroud)

在这里,我们看到与该summary函数相关的所有方法.这意味着当您在lm对象上调用summary时,与在data.frame上调用summary时存在不同的代码.这很好,因为我们不希望对这两个对象以相同的方式进行摘要.

要查看在data.frame上调用summary时运行的代码,只需键入即可

summary.data.frame
Run Code Online (Sandbox Code Playgroud)

如方法列表中所示.您将能够检查并研究它并使用打印的代码执行任何操作.你提到你对因素感兴趣,所以你可能想要检查输出summary.factor.现在您可能会注意到,打印的某些方法旁边有一个星号(*),这意味着它们是不可见的.这实际上意味着您不能只键入函数的名称来尝试查看代码.

> summary.prcomp
Error: object 'summary.prcomp' not found
Run Code Online (Sandbox Code Playgroud)

但是,如果您决定查看代码实际是什么,则可以使用该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>
Run Code Online (Sandbox Code Playgroud)

希望这有助于您在将来更轻松地探索R中的代码.

有关更多详细信息,您可以查看The R Journal的第6/4卷(警告,pdf),并阅读Uwe Ligge的"R帮助台"部分,该部分涉及查看R功能的源代码.