2015-01-23 11 views
9

पर एस 3 प्रेषण को लागू करने का उचित तरीका मेरे पास R6 कक्षा है और मैं इसके लिए S3 विधि जोड़ना चाहता हूं। मैंने पाया दस्तावेज संक्षेप में उल्लेख किया है कि S3R6 पर प्रेषण करने के लिए आपके पास class = TRUE होना चाहिए, लेकिन मुझे यह उदाहरण नहीं मिला कि इसे कैसे किया जाना चाहिए।आर 6 कक्षाओं

मैं देख रहा हूँ अनुभव कि बस प्रपत्र s3generic.r6class काम में एक S3 विधि लेखन किया था, लेकिन मैं अगर है कि सही तरीके से R6 के लिए एक S3 विधि लिखने के लिए वास्तव में है जानना चाहता था।

उदाहरण के लिए, मैं एक R6 वर्ग है कि एक list

library(R6) 

R6list <- R6Class(
    "R6list", 
    public = list(
    orig = NULL, 
    initialize = function(x) { 
     self$orig <- x 
    } 
) 
) 

प्रश्न 1

को बढ़ाता है स्वाभाविक रूप से, मैं अंतर्निहित सूची प्राप्त करने के लिए एक तरीका प्रदान करना चाहते हैं का कहना है कि, तो मैं करना चाहता था as.list विधि जोड़ें। क्या कक्षा के अंदर एक एस 3 जेनेरिक और as.list सार्वजनिक कार्य दोनों को जोड़ना मानक है? मेरा सहज जवाब दोनों को जोड़ना है।

R6list <- R6Class(
    "R6list", 
    public = list(
    orig = NULL, 
    initialize = function(x) { 
     self$orig <- x 
    }, 
    as.list = function() { 
     self$orig 
    } 
) 
) 

as.list.R6list <- function(x, ...) { 
    x$as.list() 
} 

तो है कि अब मैं as.list(mylist) या mylist$as.list() फोन या तो कर सकते हैं अगर मैं एक वस्तु mylist <- R6list$new(as.list(letters[1:5])) है। क्या उनमें से एक दूसरे पर पसंद है?

प्रश्न 2
क्या R6 कक्षाओं के लिए एक S3 विधि लिखने के बारे में विशेष है, या क्या मैं पर्याप्त और सही तरीके से ऊपर लिखा है? मुझे यकीन नहीं था कि S3 विधि को कक्षा परिभाषा के बाहर लिखा जाना चाहिए, या R6 किसी भी तरह से S3 विधियों को लिखने का तरीका प्रदान करता है ताकि कक्षा से संबंधित सभी कोड स्थानीयकृत हो जाएं।

+0

R6Class के लिए डिफ़ॉल्ट 'वर्ग = TRUE' है, इसलिए एक अर्थ में आप देखे गए सभी उदाहरण इस तरह के उपयोग के चित्र हैं। –

+0

दाएं, 'वर्ग = TRUE' कारण है कि मेरा कोड काम से ऊपर है, लेकिन मुझे कोई उदाहरण नहीं दिख रहा है कि एस 3 विधि कैसे लिखना है, इसलिए मुझे आश्चर्य है कि यह –

+0

करने का अनुशंसित तरीका है आधिकारिक उत्तर (अभी कम से कम) यह है कि मैं जो कर रहा हूं वह सही है। https://github.com/wch/R6/issues/42 –

उत्तर

4

मैंने R6 के लेखक विंस्टन चांग से पूछा, इस on Github के बारे में। उनके अनुसार, ऊपर प्रश्न 1 में प्रदान किया गया कोड आर 6 कक्षाओं के लिए एस 3 विधियों को लिखने का सही तरीका है।

संबंधित मुद्दे