Inspeccionar los métodos S4
-
24-09-2019 - |
Pregunta
¿Cómo puedo ver la definición de una función S4? Por ejemplo, me gustaría ver la definición de TSConnect en el paquete TSDBI. El comando
showMethods("TSconnect")
revela que existe, entre otros, una función para drv = "histquotedriver", dbname = "carácter".
¿Cómo puedo ver la definición de esta función? Si fuera una función S3, solo habría el primer argumento definible (DRV), que podría inspeccionarse con impresión (tsconnect.histQuotedriver).
Editar: De R-Forge descubrí la salida deseada:
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 )
} )
¿Hay alguna forma de obtener esta definición de una sesión R?
Solución
Las clases S4 son relativamente complicadas, por lo que sugeriría leyendo esta introducción.
En este caso, TSDBI es un ejemplo de una clase S4 genérica que se extiende por todos los paquetes de bases de datos específicos (por ejemplo, TSMYSQL, TSPOSTGRESQL, etc.). No hay nada más en el método tsconnect () en tsdbi que lo que estás viendo: drv = "carácter", dbname = "carácter" son parámetros para la función, no funciones en sí mismas. Si instala algunos de los paquetes de bases de datos específicos y usa showmethods ("tsconnect"), verá todas las instancias específicas de esa función. Si entonces llame a tsconnect () con un controlador de base de datos específico, irá y usará la función apropiada.
Así es como las funciones como el trabajo sumario también. Por ejemplo, intente llamar showMethods(summary)
. Dependiendo de qué paquetes se cargan, debería ver múltiples métodos devueltos
Puede ver fácilmente el código fuente en R-Forge: http://r-forge.r-project.org/plugins/scmsvn/viewcvs.php/pkg/tsdbi/r/tsdbi.r?rev=70&root=tsdbi&view=markup. Este es el alcance de esa función:
setGeneric("TSconnect", def= function(drv, dbname, ...) standardGeneric("TSconnect"))
setMethod("TSconnect", signature(drv="character", dbname="character"),
definition=function(drv, dbname, ...)
TSconnect(dbDriver(drv), dbname=dbname, ...))