मैं वर्तमान में एक परियोजना पर काम कर रहा हूं जहां मुझे आर में R6 class बनाने की आवश्यकता है जिसे एक से अधिक तरीकों से शुरू किया जा सकता है। मैं सोच रहा हूं कि इसके बारे में क्या सबसे अच्छा तरीका है। क्या $new()
फ़ंक्शन को अधिभारित करना संभव है? या मुझे एक सहायक समारोह को परिभाषित करने की आवश्यकता है?आर: आर 6 कक्षा के लिए कई रचनाकारों को परिभाषित करने के लिए कैसे?
एक प्रेरित उदाहरण के रूप में: मैं एक क्षेत्र names
है कि या तो प्रयोग करके वेक्टर variable_names
या एक पूर्णांक n_variables
(जिस स्थिति में यह नामों की एक डिफ़ॉल्ट वेक्टर initializes) का उपयोग कर प्रारंभ किया जा सकता है के साथ एक R6 वर्ग MyClass
के लिए दो कंस्ट्रक्टर्स करना चाहते हैं ।
कार्यक्षमता इस तरह काम करना चाहिए:
#define the class (only has a constructor that accepts a vector of names)
myClass <- R6Class("myClass",
public = list(
names = NA,
initialize = function(names) {
if (!missing(names)) self$names <- names
})
)
#create a test object using a vector of names
variable_names = c("x","y")
a = myClass$new(variable_names)
a$names
#> [1] "x y"
#everything after here does not actually work (just to illustrate functionality)
n_variables = 2;
b = myClass$new(n_variables)
b$names
#> [1] "v1 v2"
मैं Introductory vignette, के माध्यम से एक बार देख लिया, लेकिन वहाँ यह करने के लिए एक स्पष्ट तरीका हो प्रतीत नहीं होता है।
आदर्श रूप में, मैं ऐसे समाधान की तलाश में हूं जो मुझे तर्कों का नाम देने के लिए मजबूर नहीं करता है (यानी मुझे myClass$new(names=variable_names)
जैसे कुछ करने की ज़रूरत नहीं है) और इससे मुझे आसानी से जांच मिलती है कि इनपुट मान्य हैं।
आप एक आवरण सहायक समारोह है कि निर्माता के नाम की वांछित संख्या पारित करेंगे निर्माण कर सकते हैं? –
@ 42- क्षमा करें मैं सुझाव से थोड़ा उलझन में हूं। यह कैसे काम करेगा? –
मैंने अभी यहां एक बहुत ही समान प्रश्न का उत्तर दिया है https://stackoverflow.com/questions/35881234/ –