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
.
ann jemand eine Möglichkeit finden, den Funktionsnamen beizubehalten, wenn die Funktion in einem anderen Objekt gespeichert is
Vielen Dank für Ihre Hilfe