2012-06-23 6 views
12

Tengo un marco de datos y quiero aprender cómo el resumen genera su información. Específicamente, cómo el resumen genera un conteo para la cantidad de elementos en cada nivel de un factor. Puedo usar un resumen, pero quiero aprender a trabajar mejor con los factores. Cuando intento? Resumen, acabo de obtener la información general. ¿Es esto imposible porque está en bytecode?¿Cómo puedo leer el código para summary() para un marco de datos?

+1

intente '> summary.data.frame' en la consola. – kohske

+0

Vea '? Methods' e intente' methods (summary) ', que debería llevarlo a' summary.data.frame', que está documentado en '? Summary'. –

+0

Esta sesión de preguntas y respuestas es aún más definitiva: http://stackoverflow.com/questions/19226816/how-can-i-view-the-source-code-for-a-function –

Respuesta

32

lo que vemos cuando se escribe summary es

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

Esto nos está diciendo que el resumen es una función genérica y tiene muchos métodos que se le atribuye. Para ver lo que esos métodos se llama en realidad podemos tratar

> 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 

Aquí vemos todos los métodos asociados con la función summary. Lo que esto significa es que hay un código diferente para cuando llama al resumen en un objeto lm que cuando llama al resumen en un data.frame. Esto es bueno porque no esperaríamos que el resumen se realice de la misma manera para esos dos objetos.

para ver el código que se ejecuta cuando se llama resumen en un hoja.de.datos que puede escribir sólo

summary.data.frame 

como se muestra en la lista de métodos. Podrá examinarlo, estudiarlo y hacer lo que quiera con el código impreso. Mencionó que estaba interesado en factores, por lo que probablemente desee examinar el resultado de summary.factor. Ahora puede observar que algunos de los métodos impresos tenían un asterisco (*) junto a ellos, lo que implica que no son visibles. Esto esencialmente significa que no puede simplemente escribir el nombre de la función para tratar de ver el código.

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

Sin embargo, si usted está decidido a ver lo que en realidad es el código que puede utilizar la función getAnywhere para visualizarla.

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

Esperamos que esto le ayude a explorar el código en R mucho más fácilmente en el futuro.

Para obtener más información, puede ver Volume 6/4 of The R Journal (warning, pdf) y leer la sección "R Help Desk" de Uwe Ligge, que trata de ver el código fuente de las funciones R.

+1

Bien explicado. 'methods (class = data.frame)' también se pueden mencionar. – Roland

Cuestiones relacionadas