【发布时间】:2018-12-21 17:51:02
【问题描述】:
我想为两个接受可选参数的函数编写一个包装函数。
这是一个函数 fun 包装 funA 和 funB 的示例
funA <- function(x = 1, y = 1) return(x+y)
funB <- function(z = c(1, 1) return(sum(z))
fun <- function(x, y, z)
如果提供了x 和y,我希望fun 返回x+y,如果提供了向量z,则返回sum(z)。
我试图查看lm 函数如何接受这些可选参数,但不清楚究竟是如何使用的,例如match.call 在这里是如何使用的。
在找到相关问题(例如How to use R's ellipsis feature when writing your own function?和using substitute to get argument name with )后,我想出了一个可行的解决方案。
我的解决方案只是使用
fun <- function(...){
inputs <- list(...)
if (all(c("x", "y") %in% inputs){
ans <- funA(x, y)
} else if ("z" %in% inputs){
ans <- funB(z)
}
有没有更好的办法?
注意:也许这个问题可以作为重复关闭,但希望它可以用于指导其他用户找到一个好的解决方案:将我的搜索扩展到各种除了match.call之外,还包括ellipsis、substitute。
【问题讨论】:
-
@agstudy 我在中途找到了一个可用的解决方案,但想知道一个更强大的方法。
标签: r