![](/img/trans.png)
[英]How to pass multiple list of lists as arguments to mapply function in R
[英]how to pass arguments as a list in R function
我有很多参数的函数。 所以我想创建一个参数列表并将它们传递给函数。
以?mean
函数为例:
mean(x, trim = 0, na.rm = FALSE, ...)
所以假设我想计算1:10
平均值,分配给变量x
,但将其他参数作为列表传递:
gm <- list (trim = 0, na.rm = FALSE)
mean(1:10, gm)
#R> Error in mean.default(1:10, gm) : 'trim' must be numeric of length one
我尝试使用do.call
但也不起作用。
do.call(mean,list(1:10, gm))
#R> Error in mean.default(1:10, list(trim = 0, na.rm = FALSE)) :
#R> 'trim' must be numeric of length one
这也可以用rlang::exec
和 unquote-splice 操作符来完成, !!!
.
rlang::exec(mean, 1:10, !!!gm)
#> [1] 5.5
您可以设置默认参数,如果您重复执行此操作作为使用do.call
的替代方法,这可能会很方便。 你可以做到这一点formals
如下:
f <- mean.default
formals(f)[match(names(formals(f)), names(gm))] <- gm
f(1:10)
#R> [1] 5.5
这有一些需要注意的极端情况。 一方面,我使用mean.default
而不是mean
,否则我必须将来自gm
的参数放在...
之前。
do.call
另一种替代方法是创建一个call
并使用eval
:
cl <- as.call(c(list(quote(mean), x = 1:10), gm))
cl
#R> mean(x = 1:10, trim = 0, na.rm = FALSE)
eval(cl)
#R> [1] 5.5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.