【发布时间】:2022-01-02 21:59:15
【问题描述】:
目前,我在 table 和 xtabs 周围有两个非常相似的包装器:
mytable <- function(..., useNA = "ifany") {
tab <- table(..., useNA = useNA)
# additional manipulations
tab
}
mytable(warpbreaks[-1])
myxtabs <- function(..., na.action = NULL, addNA = TRUE) {
tab <- xtabs(..., na.action = na.action, addNA = addNA)
# same manipulations as in mytable
tab
}
myxtabs(breaks ~ ., warpbreaks)
由于大多数代码都是重复的,我希望将两个包装器合并为一个。一个简单的解决方案是:
newfun <- function(..., fun) {
fun <- match.fun(fun)
tab <- fun(...)
# same manipulations as in mytable
tab
}
newfun(warpbreaks[-1], fun = table)
newfun(breaks ~ ., warpbreaks, fun = xtabs)
但是,我可以根据匹配的函数指定默认参数吗?即:
- 如果
fun = table,则设置useNA = "ifany"; - 或者如果
fun = xtabs,设置na.action = NULL和addNA = TRUE。
此外,将fun 限制为仅table 和xtabs 的“推荐”方式是什么?我想我有很多方法可以实现这一点(stopifnot、if/else、switch、match.arg),但我在这里寻找好的做法。
【问题讨论】:
标签: r function default-value