Je développe une fonction qui renvoie une autre fonction d'une forme particulière (linéaire ou asymptotique, indiquée par l'argument "FuncType"). Je voudrais assigner un vecteur de valeurs par défaut à l'argument "params" de la fonction à retourner.R: Créer une fonction dans une fonction, en passant les arguments par défaut
# FuncType is either "lin" or "asymp"
# params is a numerical vector of parameters (length 3 if FuncType is "lin",
# length 4 if FuncType is "asymp")
GenerateFunc <- function(FuncType = "lin", params) {
# Linear case: m (slope), b (intercept), and err (error)
if (FuncType == "lin") {
outfunc <- function(x, params){
m <- params[1]
b <- params[2]
err <- params[3]
outval <- m*x + b + rnorm(1, 0, err)
return(outval)
}
}
# Asymptotic case: a (slope), b (curvature), c (rate of convergence), and err (error)
if (FuncType == "asymp") {
outfunc <- function(x, params){
a <- params[1]
b <- params[2]
c <- params[3]
err <- params[4]
outval <- (a * x)/(b*x + c) + rnorm(1, 0, err)
return(outval)
}
}
return(outfunc)
}
"GenerateFunc" crée la fonction souhaitée, mais ne passe pas "params" à "outfunc" comme argument par défaut:
myfunc <- GenerateFunc("asymp", params = rep(1,4))
myfunc(x = 10)
Error in myfunc(x = 10) : argument "params" is missing, with no default
Un grand merci à l'avance pour vos conseils.
Cheers, Nate
Merci! J'avais essayé sans succès "params = params" plus tôt mais j'ai oublié d'inclure cela dans ma version reproductible. –