>From the line `function(A, B) standardGeneric("SetOfParams")`, A and B will always have default values of R_MissingArg Providing default values within the methods does nothing since A and B have already been initialized before arriving at the method. You could do something like:
if (missing(A)) A <- ... if (missing(B)) B <- ... within each method, and that would emulate having default values for A and B. On Mon, Nov 8, 2021 at 12:00 AM Dario Strbenac <dstr7...@uni.sydney.edu.au> wrote: > Good day, > > How can a parameter take a default value from a vector of permitted ones, > if it is missing? > > setClassUnion("characterOrMissing", c("character", "missing")) > setClassUnion("integerOrMissing", c("integer", "missing")) > setClass("SetOfParams", representation(A = "characterOrMissing", B = > "integer")) > setGeneric("SetOfParams", function(A, B) standardGeneric("SetOfParams")) > > setMethod("SetOfParams", c("missing", "missing"), function() # Empty > constructor > { > new("SetOfParams", A = "M", B = 100L) > }) > > setMethod("SetOfParams", c("characterOrMissing", "integerOrMissing"), > function(A = c("L", "M", "N"), B = 100L) > { > A <- match.arg(A) > new("SetOfParams", A = A, B = B) > }) > > SetOfParams(B = 500L) > Error in match.arg(A) : argument "A" is missing, with no default. > > How can I avoid the error about A having no default? I thought I specified > it so that it does have one, which match.arg would set for me if the user > did not specify one. > > -------------------------------------- > Dario Strbenac > University of Sydney > Camperdown NSW 2050 > Australia > ______________________________________________ > R-package-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-package-devel > [[alternative HTML version deleted]] ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel