Pergunta

Como posso ver a definição de uma função S4? Por exemplo, eu gostaria de ver a definição de TSCONNECT no pacote TSDBI. O comando

showMethods("TSconnect")

revela que existe, entre outros, uma função para drv = "histtoquotedriver", dbname = "caractere".

Como posso ver a definição dessa função? Se fosse uma função S3, haveria apenas o primeiro argumento definível (DRV), que poderia ser inspecionado com impressão (tSconnect.HistQuoTriver).

Editar: De R-Forge, descobri a saída desejada:

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 uma maneira de obter essa definição de uma sessão R?

Foi útil?

Solução

As aulas S4 são relativamente complicadas, então eu sugeriria lendo esta introdução.

Nesse caso, o TSDBI é um exemplo de uma classe S4 genérica que é estendida por todos os pacotes de bancos de dados específicos (por exemplo, TSMYSQL, TSPOSTGRESQL, etc.). Não há mais nada no método tSconnect () no tsdbi do que o que você está vendo: drv = "caractere", dbname = "caractere" são parâmetros para a função, não funções em si mesmas. Se você instalar alguns dos pacotes específicos de banco de dados e usar o ShowMethods ("TSCONNECT"), verá todas as instâncias específicas dessa função. Se você ligar para o TSCONNECT () com um driver de banco de dados específico, ele usará a função apropriada.

É assim que as funções como o resumo também funcionam. Por exemplo, tente ligar showMethods(summary). Dependendo de quais pacotes são carregados, você deve ver vários métodos retornados

Você pode ver facilmente o código-fonte no R-Forge: http://r-forge.r-project.org/plugins/scmsvn/viewcvs.php/pkg/tsdbi/rsdbi.r?rev=70&root=tsdbi&view=markup. Esta é a extensão dessa função:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top