UseMethod("t")
आपको बता रहा है कि t()
एक ( S3 ) जेनेरिक फ़ंक्शन है जिसमें विभिन्न ऑब्जेक्ट कक्षाओं के लिए तरीके हैं।
S3 विधि प्रेषण प्रणाली
S3 वर्गों के लिए, आप methods
किसी विशेष जेनेरिक फ़ंक्शन या वर्ग के लिए विधियों को सूचीबद्ध करने के लिए फ़ंक्शन का उपयोग कर सकते हैं ।
> methods(t)
[1] t.data.frame t.default t.ts*
Non-visible functions are asterisked
> methods(class="ts")
[1] aggregate.ts as.data.frame.ts cbind.ts* cycle.ts*
[5] diffinv.ts* diff.ts kernapply.ts* lines.ts
[9] monthplot.ts* na.omit.ts* Ops.ts* plot.ts
[13] print.ts time.ts* [<-.ts* [.ts*
[17] t.ts* window<-.ts* window.ts*
Non-visible functions are asterisked
"गैर-दृश्य फ़ंक्शंस तारांकित हैं" इसका मतलब है कि फ़ंक्शन को उसके पैकेज के नाम स्थान से निर्यात नहीं किया गया है। आप इसके स्रोत कोड को अभी भी देख सकते हैं:::
फ़ंक्शन (यानी stats:::t.ts
), या उपयोग करकेgetAnywhere()
। getAnywhere()
उपयोगी है क्योंकि आपको यह पता नहीं है कि समारोह किस पैकेज से आया है।
> getAnywhere(t.ts)
A single object matching ‘t.ts’ was found
It was found in the following places
registered S3 method for t from namespace stats
namespace:stats
with value
function (x)
{
cl <- oldClass(x)
other <- !(cl %in% c("ts", "mts"))
class(x) <- if (any(other))
cl[other]
attr(x, "tsp") <- NULL
t(x)
}
<bytecode: 0x294e410>
<environment: namespace:stats>
S4 विधि प्रेषण प्रणाली
S4 प्रणाली एक नई विधि प्रेषण प्रणाली है और S3 प्रणाली का एक विकल्प है। यहाँ एक S4 फ़ंक्शन का एक उदाहरण दिया गया है:
> library(Matrix)
Loading required package: lattice
> chol2inv
standardGeneric for "chol2inv" defined from package "base"
function (x, ...)
standardGeneric("chol2inv")
<bytecode: 0x000000000eafd790>
<environment: 0x000000000eb06f10>
Methods may be defined for arguments: x
Use showMethods("chol2inv") for currently available ones.
आउटपुट पहले से ही बहुत सारी जानकारी प्रदान करता है। standardGeneric
S4 फ़ंक्शन का एक संकेतक है। परिभाषित एस 4 विधियों को देखने की विधि मदद से पेश की जाती है:
> showMethods(chol2inv)
Function: chol2inv (package base)
x="ANY"
x="CHMfactor"
x="denseMatrix"
x="diagonalMatrix"
x="dtrMatrix"
x="sparseMatrix"
getMethod
तरीकों में से एक के स्रोत कोड को देखने के लिए इस्तेमाल किया जा सकता है:
> getMethod("chol2inv", "diagonalMatrix")
Method Definition:
function (x, ...)
{
chk.s(...)
tcrossprod(solve(x))
}
<bytecode: 0x000000000ea2cc70>
<environment: namespace:Matrix>
Signatures:
x
target "diagonalMatrix"
defined "diagonalMatrix"
उदाहरण के लिए, प्रत्येक विधि के लिए अधिक जटिल हस्ताक्षर वाले तरीके भी हैं
require(raster)
showMethods(extract)
Function: extract (package raster)
x="Raster", y="data.frame"
x="Raster", y="Extent"
x="Raster", y="matrix"
x="Raster", y="SpatialLines"
x="Raster", y="SpatialPoints"
x="Raster", y="SpatialPolygons"
x="Raster", y="vector"
इन विधियों में से किसी एक के लिए स्रोत कोड देखने के लिए पूरे हस्ताक्षर की आपूर्ति की जानी चाहिए, जैसे
getMethod("extract" , signature = c( x = "Raster" , y = "SpatialPolygons") )
यह आंशिक हस्ताक्षर की आपूर्ति करने के लिए पर्याप्त नहीं होगा
getMethod("extract",signature="SpatialPolygons")
#Error in getMethod("extract", signature = "SpatialPolygons") :
# No method found for function "extract" and signature SpatialPolygons
फ़ंक्शंस जो अस्पष्टीकृत कार्यों को कहते हैं
के मामले में ts.union
, .cbindts
और नाम स्थान .makeNamesTs
से अस्पष्टीकृत कार्य हैं stats
। आप :::
ऑपरेटर का उपयोग करके गैर-पंजीकृत कार्यों के स्रोत कोड देख सकते हैं getAnywhere
।
> stats:::.makeNamesTs
function (...)
{
l <- as.list(substitute(list(...)))[-1L]
nm <- names(l)
fixup <- if (is.null(nm))
seq_along(l)
else nm == ""
dep <- sapply(l[fixup], function(x) deparse(x)[1L])
if (is.null(nm))
return(dep)
if (any(fixup))
nm[fixup] <- dep
nm
}
<bytecode: 0x38140d0>
<environment: namespace:stats>
संकलित कोड को कॉल करने वाले फ़ंक्शंस
ध्यान दें कि "संकलित" बाइट-संकलित आर कोड को संदर्भित नहीं करता है जैसा कि संकलक पैकेज द्वारा बनाया गया है । <bytecode: 0x294e410>
ऊपर उत्पादन में रेखा यह संकेत समारोह बाइट-संकलित है, और आप अभी भी आर कमांड लाइन से स्रोत देख सकते हैं।
कार्य है कि कॉल .C
, .Call
, .Fortran
, .External
, .Internal
, या .Primitive
संकलित कोड में प्रवेश बिंदुओं बुला रहे हैं, तो आप संकलित कोड के स्रोतों को देखने के लिए करता है, तो आप पूरी तरह से समारोह को समझना चाहते हैं होगा। R स्रोत कोड का यह GitHub दर्पण शुरू करने के लिए एक सभ्य स्थान है। फ़ंक्शन pryr::show_c_source
एक उपयोगी उपकरण हो सकता है क्योंकि यह आपको कॉल .Internal
और .Primitive
कॉल के लिए सीधे GitHub पृष्ठ पर ले जाएगा । संकुल का उपयोग कर सकते .C
, .Call
, .Fortran
, और .External
; लेकिन नहीं.Internal
या.Primitive
, क्योंकि ये आर दुभाषिया में निर्मित कार्यों को कॉल करने के लिए उपयोग किया जाता है।
उपरोक्त कार्यों में से कुछ को संकलित फ़ंक्शन को संदर्भित करने के लिए वर्ण स्ट्रिंग के बजाय ऑब्जेक्ट का उपयोग किया जा सकता है। उन मामलों में, वस्तु वर्ग की है "NativeSymbolInfo"
, "RegisteredNativeSymbol"
या "NativeSymbol"
; और ऑब्जेक्ट को प्रिंट करने से उपयोगी जानकारी मिलती है। उदाहरण के लिए, optim
कॉल .External2(C_optimhess, res$par, fn1, gr1, con)
(ध्यान दें कि C_optimhess
, नहीं "C_optimhess"
)। optim
आँकड़े पैकेज में है, इसलिए आप stats:::C_optimhess
संकलित फ़ंक्शन के बारे में जानकारी देखने के लिए कह सकते हैं।
एक पैकेज में संकलित कोड
यदि आप एक पैकेज में संकलित कोड देखना चाहते हैं, तो आपको पैकेज स्रोत को डाउनलोड / अनपैक करना होगा। स्थापित बायनेरिज़ पर्याप्त नहीं हैं। पैकेज का स्रोत कोड उसी CRAN (या CRAN संगत) रिपॉजिटरी से उपलब्ध है जिसे पैकेज मूल रूप से स्थापित किया गया था। download.packages()
समारोह आप के लिए पैकेज स्रोत मिल सकता है।
download.packages(pkgs = "Matrix",
destdir = ".",
type = "source")
यह मैट्रिक्स पैकेज के स्रोत संस्करण को डाउनलोड करेगा और .tar.gz
वर्तमान निर्देशिका में संबंधित फ़ाइल को बचाएगा । संकलित कार्यों के लिए स्रोत कोड src
को असम्पीडित और अनरेटेड फ़ाइल की निर्देशिका में पाया जा सकता है । फ़ंक्शन के उपयोग R
से या उसके भीतर से अनकम्प्रेस्ड और अनटेयरिंग स्टेप किया जा सकता है । डाउनलोड और एक्सपेंशन स्टेप को एक कॉल में संयोजित करना संभव है (ध्यान दें कि एक बार में केवल एक पैकेज को डाउनलोड किया जा सकता है और इस तरह से अनपैक किया जा सकता है):R
untar()
untar(download.packages(pkgs = "Matrix",
destdir = ".",
type = "source")[,2])
वैकल्पिक रूप से, यदि पैकेज के विकास को सार्वजनिक रूप से होस्ट किया जाता है (जैसे GitHub , R-Forge , या RForge.net के माध्यम से ), तो आप शायद ऑनलाइन स्रोत कोड ब्राउज़ कर सकते हैं।
आधार पैकेज में संकलित कोड
कुछ पैकेजों को "आधार" पैकेज माना जाता है। इन पैकेजों आर के साथ जहाज और उनके संस्करण आर उदाहरण के संस्करण के लिए लॉक किया गया है शामिल हैं base
, compiler
, stats
, और utils
। जैसे, वे ऊपर वर्णित के रूप में CRAN पर अलग डाउनलोड करने योग्य पैकेज के रूप में उपलब्ध नहीं हैं। बल्कि, वे व्यक्तिगत पैकेज निर्देशिकाओं में R स्रोत वृक्ष का हिस्सा हैं /src/library/
। R स्रोत तक पहुंचने का तरीका अगले भाग में वर्णित है।
संकलित कोड आर दुभाषिया में बनाया गया
यदि आप आर इंटरप्रेटर में निर्मित कोड देखना चाहते हैं, तो आपको आर स्रोतों को डाउनलोड / अनपैक करना होगा; या आप आर सबवर्सन रिपॉजिटरी या विंस्टन चांग के जीथब मिरर के माध्यम से स्रोतों को ऑनलाइन देख सकते हैं ।
Uwe Ligges का R न्यूज़ आर्टिकल (PDF) (पृष्ठ 43) एक अच्छा सामान्य संदर्भ है कि कैसे .Internal
और .Primitive
फ़ंक्शंस के सोर्स कोड को देखा जाए । मूल चरणों को पहले फ़ंक्शन नाम में देखना है src/main/names.c
और फिर फ़ाइलों में "सी-एंट्री" नाम खोजना है src/main/*
।