Funktionsnamen beibehalten, wenn sie in einem Objekt gespeichert sind

Ich bereite ein Paket vor, in dem Benutzer Funktionen und die zugehörigen Argumente in einem @ speichern müsselist zur späteren Verwendung. Dies ist ein typisches Beispiel für die Funktionsweise:

Vorbereitung der Liste mit Funktionsnamen und Argumenten

parameters <- list(a1 = list(fun = dnorm,
                             args = list(mean = 150, sd = 100)),
                   a2 = list(fun = dpois,
                             args = list(lambda = 40)))

Hier ist ein Beispiel, wie dieses Parameterobjekt in anderen Funktionen verwendet wird:

x <- 1:100
myfunction <- function(x, var, parameters)
{
    results <- list(var = var,
                    y = do.call(parameters[[var]]$fun, 
                                c(list(x), parameters[[var]]$args)),
                    parameters = parameters)
    class(results) <- "customclass"
    return(results)
}
myfunction(x, "a1", parameters)

Angenommen, ich möchte die Namen der in @ gespeicherten Funktionen druckeparameters in der Ausgabe vonmyfunction.

print.customclass <- function(X)
{
   cat("Function name:", X$parameters[[X$var]]$fun)
}

Dieser benutzerdefinierte Druck funktioniert nicht:

> myfunction(x, "a1", parameters)
Error in cat(list(...), file, sep, fill, labels, append) : 
argument 2 (type 'closure') cannot be handled by 'cat' 

Ich habe auch andere Lösungsvorschläge ausprobiert, die an anderer Stelle gefunden wurden, z. B .:

print.customclass <- function(X)
{
   cat("Function name:", deparse(quote(X$parameters[[X$var]]$fun)))
}

> myfunction(x, "a1", parameters)
Function name: X$parameters[[X$var]]$fun

Gemäß Harlan in dieser anderen Frage, der Name der Funktion geht verloren, wenn er in einem anderen R-Objekt gespeichert wird. Er schlug vor, die Liste der Funktionen mit den Funktionsnamen zu benennen,

parameters <- list(a1 = list(dnorm = dnorm,
                             args  = list(mean = 150, sd = 100)),
                   a2 = list(dpois = dpois,
                             args  = list(lambda = 40)))

Ich wollte jedoch die gleichen Namen behalten fun) für jedes Element meineslist.

Meine Frage ist also

ann jemand eine Möglichkeit finden, den Funktionsnamen beizubehalten, wenn die Funktion in einem anderen Objekt gespeichert is

Vielen Dank für Ihre Hilfe

Antworten auf die Frage(2)

Ihre Antwort auf die Frage