سؤال
كيف يمكنني عرض تعريف وظيفة 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 ، إلخ). لا يوجد شيء أكثر من طريقة 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, ...))