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?

¿Fue útil?

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, ...))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top