我正在准备一个包,其中用户必须将函数及其关联参数存储在list
中供以后使用。这是它如何工作的典型的例子:存储在对象中时保留函数名称
制备含有功能名称和参数
parameters <- list(a1 = list(fun = dnorm,
args = list(mean = 150, sd = 100)),
a2 = list(fun = dpois,
args = list(lambda = 40)))
这里列表的是如何这个参数对象在其他功能中使用的一个示例:
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)
现在假设我想在myfunction
的输出中打印存储在parameters
中的函数的名称。
print.customclass <- function(X)
{
cat("Function name:", X$parameters[[X$var]]$fun)
}
此自定义打印将无法正常工作:
> myfunction(x, "a1", parameters)
Error in cat(list(...), file, sep, fill, labels, append) :
argument 2 (type 'closure') cannot be handled by 'cat'
我也试图在其他地方发现了其他建议的解决方案,如:
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
据Harlan in this other question,该函数的名称当存储在另一个R对象中时会丢失。他建议命名的功能与功能名称列表,例如:
parameters <- list(a1 = list(dnorm = dnorm,
args = list(mean = 150, sd = 100)),
a2 = list(dpois = dpois,
args = list(lambda = 40)))
不过,我想保持相同的名称(fun
)我list
的每一个元素。因此
我的问题是
任何人可以想办法让函数名,当函数存储在另一个对象?
非常感谢您的帮助!
这是一个很好的答案,我不知道'alist'。你是对的,我应该为参数对象写一个构造函数方法。我不确定我如何编写它,使其非常人性化。 – 2014-09-02 11:38:36
@BorisLeroy我已经改变了这个功能,因为''这样的评估似乎有点笨重。 – Roland 2014-09-02 12:30:25