2010-01-31 17 views
11

Comment visualiser la définition d'une fonction S4? Par exemple, je voudrais voir la définition de TSconnect dans le paquet TSdbi. La commandeInspecter les méthodes S4

showMethods("TSconnect") 

révèle qu'il existe, entre autres, une fonction pour DRV = "histQuoteDriver", dbname = "caractère".

Comment puis-je voir la définition de cette fonction? S'il s'agissait d'une fonction S3, il n'y aurait que le premier argument définissable (drv), qui pourrait être inspecté avec print (TSconnect.histQuoteDriver).

Modifier: A partir de r-forge j'ai découvert la sortie désirée:

setMethod("TSconnect", signature(drv="histQuoteDriver", dbname="character"), 
    definition= function(drv, dbname, user="", password="", host="", ...){ 
    # user/password/host for future consideration 
    if (is.null(dbname)) stop("dbname must be specified") 
    if (dbname == "yahoo") { 
     con <- try(url("http://quote.yahoo.com"), silent = TRUE) 
     if(inherits(con, "try-error")) 
     stop("Could not establish TShistQuoteConnection to ", dbname) 
     close(con) 
     } 
    else if (dbname == "oanda") { 
     con <- try(url("http://www.oanda.com"), silent = TRUE) 
     if(inherits(con, "try-error")) 
     stop("Could not establish TShistQuoteConnection to ", dbname) 
     close(con) 
     } 
    else 
     warning(dbname, "not recognized. Connection assumed working, but not tested.") 

    new("TShistQuoteConnection", drv="histQuote", dbname=dbname, hasVintages=FALSE, hasPanels=FALSE, 
     user = user, password = password, host = host) 
    }) 

Y at-il un moyen d'obtenir cette définition à partir d'une session R?

+0

Vous pourriez trouver http://stevencarlislewalker.wordpress.com/s3-s4-dictionary/ utile. –

Répondre

10

Les classes S4 sont relativement compliquées, donc je suggérerais reading this introduction. Dans ce cas, TSdbi est un exemple de classe S4 générique qui est étendue par tous les packages de bases de données spécifiques (par exemple TSMySQL, TSPostgreSQL, etc.). Il n'y a rien de plus dans la méthode TSconnect() dans TSdbi que ce que vous voyez: drv = "character", dbname = "character" sont des paramètres de la fonction, pas des fonctions en elles-mêmes. Si vous installez certains des packages de base de données spécifiques et que vous utilisez showMethods ("TSconnect"), vous verrez toutes les instances spécifiques de cette fonction. Si vous appelez TSconnect() avec un pilote de base de données spécifique, il ira et utilisera la fonction appropriée.

Les fonctions telles que le résumé fonctionnent également. Par exemple, essayez d'appeler le showMethods(summary). En fonction des paquets chargés, vous devriez voir plusieurs méthodes retournées

Vous pouvez facilement voir le code source sur R-Forge: http://r-forge.r-project.org/plugins/scmsvn/viewcvs.php/pkg/TSdbi/R/TSdbi.R?rev=70&root=tsdbi&view=markup. C'est l'étendue de cette fonction:

setGeneric("TSconnect", def= function(drv, dbname, ...) standardGeneric("TSconnect")) 

setMethod("TSconnect", signature(drv="character", dbname="character"), 
    definition=function(drv, dbname, ...) 
      TSconnect(dbDriver(drv), dbname=dbname, ...)) 
+1

Le didacticiel S4 et le lien vers le référentiel r-forge sont très utiles. J'ai édité ma question pour la rendre plus claire. –

+0

+1 pour le lien. –