假设我有一个函数可以根据输入变量的长度创建 x 个对象。然后我希望那些 x 个对象在我提供给我的函数的函数中用作参数。假设我的参数数量是可变的(基于提供的参数名称的数量),我该怎么做?
我可以通过一串参数名称来完成吗?
一个非工作的例子来说明我的要求:
(在这种情况下,使用在函数外部创建的参数来简化示例):
foo <- 1:5
na.rm <- T
func <- mean
f1 <- function(func,arg.names) {
func(get(arg.names)) }
f1(func,arg.names = c('foo','na.rm')
如何以get
列表中的所有参数的方式执行此操作?
答案 0 :(得分:2)
我们可以尝试mget
f1 <- function(func,arg.names) {
lst <- mget(arg.names, envir = parent.frame())
func(lst[[1]], na.rm = lst[[2]])
}
f1(func, arg.names = c('foo', 'na.rm'))
#[1] 3
或另一个选项是do.call
(如@ thelatemail&#39;帖子中所述),但将第一个name
元素的list
更改为&#39; x&#39 ;由于x
是&#39;数据&#39; mean
函数
##默认S3方法:
mean(x,trim = 0,na.rm = FALSE,...)
f1 <- function(func,arg.names) {
lst <- mget(arg.names, envir = parent.frame())
names(lst)[1] <- 'x'
do.call(func, lst)
}
f1(func, arg.names = c('foo', 'na.rm'))
#[1] 3
答案 1 :(得分:1)
?do.call
的魔力在等着你:
do.call(func, list(foo, na.rm=na.rm))
#[1] 3
这基本上只是创建并运行:
func(foo, na.rm=na.rm)
... func
的参数作为(可能命名的)列表传入。