Inspecter les méthodes S4
-
24-09-2019 - |
Question
Comment puis-je afficher la définition d'une fonction S4? Par exemple, j'aimerais voir la définition de TSConnect dans Package TSDBI. La commande
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é par l'impression (tSconnect.HistQuoteDriver).
Éditer: De R-Forge, j'ai découvert la sortie souhaité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 )
} )
Existe-t-il un moyen d'obtenir cette définition à partir d'une session R?
La solution
Les classes S4 sont relativement compliquées, donc je suggère Lire cette introduction.
Dans ce cas, TSDBI est un exemple de classe S4 générique qui est étendu par tous les packages de bases de données spécifiques (par exemple TSMYSQL, TSPOSTRESQL, etc.). Il n'y a rien de plus dans la méthode tsconnect () dans tsdBi que ce que vous voyez: drv = "caractère", dbname = "caractère" sont des paramètres de la fonction, et non des fonctions en soi. Si vous installez certains des packages de base de données spécifiques et utilisez ShowMethods ("tsconnect"), vous verrez toutes les instances spécifiques de cette fonction. Si vous appelez ensuite TSConnect () avec un pilote de base de données spécifique, il ira utiliser la fonction appropriée.
C'est ainsi que les fonctions telles que le résumé du fonctionnement. Par exemple, essayez d'appeler showMethods(summary)
. Selon les packages chargés, vous devriez voir plusieurs méthodes renvoyées
Vous pouvez facilement voir le code source pour lui 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, ...))