Attualmente sto lavorando a un progetto in cui ho bisogno di creare un R6 class in R che può essere inizializzato in più di un modo. Mi chiedo quale sia il modo migliore per farlo. È possibile sovraccaricare la funzione $new()
? O devo definire una funzione di supporto?R: come definire più costruttori per una classe R6?
Come esempio motivante: desidero avere due costruttori per una classe R6 MyClass
con un campo names
che può essere inizializzata utilizzando un Vector variable_names
o un numero intero n_variables
(nel qual caso inizializza un vettore predefinito di nomi) .
La funzionalità dovrebbe funzionare in questo modo:
#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"
ho preso uno sguardo attraverso il Introductory vignette,, ma non sembra essere un modo chiaro per fare questo.
Idealmente, sto cercando una soluzione che non mi costringa a nominare gli argomenti (ad esempio, non devo fare qualcosa come myClass$new(names=variable_names)
) e questo mi permette di verificare facilmente che gli input siano validi.
Si può costruire una funzione di supporto wrapper che passerà il numero desiderato di nomi al costruttore? –
@ 42- Scusa, sono un po 'confuso dal suggerimento. Come funzionerebbe? –
Ho appena risposto a una domanda molto simile qui https://stackoverflow.com/questions/35881234/ –