我想获得my_fun
中使用的参数列表,不包括点和第一个参数。我还想拥有可选参数的默认值。这就是我目前正在做的事情,但我确信有一种更简单的方法:
my_fun <- function(a, b = "b", c = "c", d = c("d1","d2"), ...){
my_call <- as.list(match.call(expand.dots = FALSE))[-1]
my_call[names(my_call) %in% c("a","...")] <- NULL
my_formals <- as.list(formals("my_fun"))
my_formals[names(my_formals) %in% c("a","...")] <- NULL
for (arg in names(my_call)){
my_formals[[arg]] <- my_call[[arg]]
}
my_formals$d <- eval(my_formals$d)
my_formals
}
res <- my_fun("a", c = 3, e = 3, f = 5)
res
# list(b = "b", c = 3, d = c("d1","d2"))
请注意,因为我正在使用formals
,所以我必须做一个尴尬的eval
。有什么想法吗?
答案 0 :(得分:4)
似乎有些人想要一种方法来构建一个加载了所有内容的列表:位置,命名和...
参数。我确信必须有边缘情况,但这可能是一个适度可重复使用的解决方案:
expand.args <- function() {
named_args <- as.list(parent.frame())
dot_args <- as.list(substitute(list(...), parent.frame()))[-1L]
c(named_args, dot_args)
}
在你的情况下(你要删除第一个参数的地方)你可以这样做:
my_fun <- function(a, b = "b", c = "c", d = c("d1", "d2"), ...) {
my_args <- expand.args()[-1L]
return(my_args)
}
my_fun("a", 3, x = "woot")
帽子提示: