2011-04-29 34 views
9

Me gustaría poder ver la función que se usa cuando uso str(), ya que me gustaría modificarla un poco para mis propios fines como otra función.En cuanto a los métodos internos

Cuando escribo str(), me sale el siguiente:

function (object, ...) 
UseMethod("str") 
<environment: namespace:utils> 

así que he intentado, getAnywhere(str):

2 differing objects matching ‘str’ were found 
in the following places 
    .GlobalEnv 
    package:utils 
    namespace:utils 
Use [] to view one of them 

pero no hay nada en la documentación acerca de lo que la sintaxis debe ser para el uso de []

Así que lo intenté, getAnywhere(str)[1]:

function (object, ...) 
UseMethod("str") 
<environment: namespace:utils> 

Sigh. De acuerdo, ¿qué pasa con showMethods(str):

Function "str": 
<not a generic function> 

Así que, ¿Cómo puedo ver la construcción de la salida para str()? ¿O puedo?

+1

Debe tener un objeto 'str' local creada como cuando hago esto es una sesión limpia' getAnywhere (str) 'encuentra sólo la función de' utilidades '. –

Respuesta

9

¿Quieres methods() para un S3 genérico como str():

> methods(str) 
[1] str.data.frame* str.Date*  str.default* 
[4] str.dendrogram* str.logLik*  str.POSIXt*  

    Non-visible functions are asterisked 

usando getAnywhere(str) no es realmente útil porque str() es visible para que pueda obtener el mismo resultado si sólo ejecuta str en el indicador. Es necesario getAnywhere() a mirar en los métodos mencionados anteriormente ocultos:

getAnywhere(str.default) 

por ejemplo.

Es una pena que sepas qué tipo de función genérica es enumerar los métodos; parece que la facilidad de uso mejoraría si a R no le importase qué tipo de método se suministró a una u otra de estas funciones.

7

También puede hacerlo de esta manera:

> methods(by) 
[1] by.data.frame by.default 
> getS3method("by", "data.frame") 
function (data, INDICES, FUN, ..., simplify = TRUE) 
{ 
    ... 
} 
<environment: namespace:base> 
Cuestiones relacionadas