के रूप में टिप्पणी का कहना है, पैकेज के एक मुट्ठी भर पहले से ही इस विचार (या समान) पर बनाए गए हैं।
data.table
और dplyr
बहुत बड़े डेटा से निपटने में असाधारण रूप से अच्छे हैं। फ्रेम और उन्हें पूछताछ। यदि डेटा.फ्रेम वास्तव में> 100 जीबी है, तो मैं डेटा.table की अनुशंसा करता हूं जो सीमा nrow-> Inf में dplyr को बेहतर प्रदर्शन करता है। स्टैक ओवरफ्लो पर दोनों को उत्कृष्ट समर्थन होना चाहिए, आपको इसकी आवश्यकता होनी चाहिए।
हालांकि, वास्तव में आपके सवाल का जवाब देने के लिए (और इस सवाल के भविष्य के पाठकों के लिए उपयोगी होने के लिए): हाँ यह आर के साथ एक समारोह अधिभार के लिए एक विकल्प के व्यवहार प्रदान करने के लिए संभव है। यह वास्तव में एस 3 प्रेषण प्रणाली के साथ बहुत आसान है। मैं और जानने के लिए this ressource की सलाह देते हैं।
मैं आपको संघीय संस्करण दूंगा: यदि आपके पास "myclass" वर्ग का ऑब्जेक्ट है, तो आप जो भी चाहते हैं उसे करने के लिए आप एक फ़ंक्शन f.myclass लिख सकते हैं।
f <- function(obj, ...) UseMethod("f", obj, ...)
जब आप f(obj)
फोन, समारोह है कि UseMethod
फोन करेगा obj के वर्ग पर निर्भर करता है:
तो फिर तुम सामान्य समारोह च परिभाषित करते हैं।
obj वर्ग "MyClass" का है, तो f.myclass obj पर बुलाया जाएगा।
समारोह आप को फिर से परिभाषित करना चाहते हैं पहले से ही मौजूद है, तो plot
कहते हैं, तो आप बस plot.myclass
परिभाषित कर सकते हैं जो उपयोग किया जाएगा जब आप एक "MyClass" वस्तु पर plot
कहते हैं। जेनेरिक फ़ंक्शन पहले से मौजूद है, इसे फिर से परिभाषित करने की आवश्यकता नहीं है।
किसी ऑब्जेक्ट की श्रेणी को बदलने के लिए (या मौजूदा कक्षा में नई कक्षा को जोड़ना, जो उस व्यवहार को तोड़ने के लिए अधिक आम है जिसे आप बदलना नहीं चाहते हैं), तो आप class<-
का उपयोग कर सकते हैं।
यहां एक मूर्ख उदाहरण है।
> print.myclass <- function(x) {
print("Hello!")}
> df <- data.frame(a=1:3)
> class(df)
[1] "data.frame"
> df #equivalent to print(df)
a
1 1
2 2
3 3
> class(df) <- append(class(df), "myclass")
> class(df)
[1] "data.frame" "myclass"
> class(df) <- "myclass"
> class(df)
[1] "myclass"
> df
[1] "Hello!"
> str(df) # checking the structure of df: the data is still there of course
List of 1
$ a: int [1:3] 1 2 3
- attr(*, "row.names")= int [1:3] 1 2 3
- attr(*, "class")= chr "myclass"
कुछ बारीकियों, अगर वहाँ कई वर्गों रहे हैं जो की तरह समारोह कहा जाता है क्या आदेश, आदि मैं तुम्हें S3 प्रणाली का एक विस्तृत विवरण का उल्लेख में, कर रहे हैं।
कि आप कार्यों का व्यवहार कैसे फिर से परिभाषित करेंगे। उन्हें f.myclass
के रूप में दोबारा लिखें और फिर कक्षा "myclass" की वस्तुएं बनाएं।
वैकल्पिक रूप से, आप f.targetclass को फिर से परिभाषित कर सकता है।उदाहरण के लिए, फिर से print
और data.frame
साथ:
> print.data.frame <- function(x) {
print(paste("data.frame with columns:", paste(names(x), collapse = ", ")))} # less silly example!
> df <- data.frame(a=1:3, b=4:6)
> df
[1] "data.frame with columns: a, b"
कोशिश पैकेज 'अपने वास्तविक समस्या के लिए sqldf', लेकिन मुझे लगता है कि तुम क्या प्रस्ताव कर रहे हैं एस 3 वर्ग तंत्र है। – James
पैकेज 'ff' और' ffbase' जांचें, वे बिल्कुल उस सिद्धांत पर बनाए गए हैं। –
'data.table' और' dplyr' की नई 'tbl_ *' साथ ही – hrbrmstr