Вопрос
Как я могу просмотреть определение функции S4? Например, я хотел бы увидеть определение TSConnect в упаковке TSDBI. Команда
showMethods("TSconnect")
Откроется, что есть, среди прочего, функция для DRV = «HistquotedRiver», dbname = "символ".
Как я могу увидеть определение этой функции? Если бы это была функция S3, был бы только первый аргумент, определяемый (DRV), который мог быть проверен с помощью печати (TSConnect.histquotedriver).
Редактировать: От R-Forge я обнаружил желаемый выход:
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 )
} )
Есть ли способ получить это определение из сессии R?
Решение
Классы S4 относительно сложные, поэтому я бы предложил Чтение этого введения.
В этом случае TSDBI является примером универсального класса S4, который расширяется всеми определенными пакетами баз данных (например, TSMYSQL, TspostgreSQL и т. Д.). В TSDBI больше нет ничего более для TSConnect () в TSDBI, чем то, что вы видите: DRV = «Характер», dbname = «Характер» - это параметры для функции, а не в себе и самих. Если вы устанавливаете некоторые из конкретных пакетов баз данных и используйте ShowMethods («TSConnect»), вы увидите все конкретные экземпляры этой функции. Если вы тогда вызовите TSConnect () с определенным драйвером базы данных, он будет идти и использовать соответствующую функцию.
Вот как такие функции, как и сводная работа. Например, попробуйте позвонить showMethods(summary)
. Отказ В зависимости от того, какие пакеты загружены, вы должны увидеть несколько методов, возвращаемых
Вы можете легко увидеть исходный код для него на R-Forge: http://r-forge.r-project.org/plugins/scmsvn/viewcvs.php/pkg/tsdbi/r/tsdbi.r?rev=70&root=tsdbi&view=markup.. Отказ Это степень этой функции:
setGeneric("TSconnect", def= function(drv, dbname, ...) standardGeneric("TSconnect"))
setMethod("TSconnect", signature(drv="character", dbname="character"),
definition=function(drv, dbname, ...)
TSconnect(dbDriver(drv), dbname=dbname, ...))