Domanda

Come posso visualizzare la definizione di una funzione S4? Ad esempio, vorrei vedere la definizione di TSConnect nel pacchetto TSDBI. Il comando

showMethods("TSconnect")

rivela che esiste, tra gli altri, una funzione per drv = "histQuotedriver", dbname = "personaggio".

Come posso vedere la definizione di questa funzione? Se fosse una funzione S3, ci sarebbe solo il primo argomento definibile (DRV), che potrebbe essere ispezionato con la stampa (tsconnect.histquotedriver).

Modificare: Da R-Forge ho scoperto l'output desiderato:

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 ) 
   } )

C'è un modo per ottenere questa definizione all'interno di una sessione R?

È stato utile?

Soluzione

Le classi S4 sono relativamente complicate, quindi suggerirei Leggendo questa introduzione.

In questo caso, TSDBI è un esempio di una classe S4 generica che viene estesa da tutti i pacchetti di database specifici (ad es. TSMYSQL, Tspostgresql, ecc.). Non c'è più nulla nel metodo tsconnect () in TSDBI di quello che stai vedendo: drv = "carattere", dbname = "carattere" sono parametri della funzione, non funzionano in e per sé. Se si installano alcuni dei pacchetti di database specifici e usi ShowMethods ("TSConnect") vedrai tutte le istanze specifiche di quella funzione. Se si chiama TSConnect () con un driver di database specifico andrà e utilizzerà la funzione appropriata.

Ecco come anche funzioni come il lavoro di riepilogo. Ad esempio, prova a chiamare showMethods(summary). A seconda di quali pacchetti vengono caricati, è necessario vedere più metodi restituiti

Puoi facilmente vedere il codice sorgente su R-Forge: http://r-forge.r-project.org/plugins/scmsvn/viewcvs.php/pkg/tsdbi/r/tsdbi.r?rev=70&root=tsdbi&view=markup. Questa è l'estensione di quella funzione:

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

setMethod("TSconnect",   signature(drv="character", dbname="character"),
   definition=function(drv, dbname, ...)
             TSconnect(dbDriver(drv), dbname=dbname, ...))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top