我正在準備一個包,其中用戶必須將函數及其關聯參數存儲在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