R语言 如何在函数参数中直接应用列表?

ldfqzlk8  于 2022-12-20  发布在  其他
关注(0)|答案(3)|浏览(94)

我不太清楚该如何问这个问题,下面是一个示例

ex_func <- function(x, y) {
  return(x^4 - x^2 - y)
}

# and I want to run something like
ex_func(runif(2, 1, 0))

runif(2, 1, 0)返回一个向量,len值为2。我希望它能自动填充函数的参数,并想知道我能做些什么。显然,我可以将它保存到某个变量中,然后获取索引,但我希望它比这更自动化.....这不是我正在研究的确切问题,但作为一个教学辅助工具已经足够了。

rqmkfv5c

rqmkfv5c1#

问题是runif的结果会传递给函数的x参数,也就是说,默认情况下,R不会将一个向量拆分成多个参数,虽然可以选择这样做,但一个简单的解决方法是将函数设为一个参数的函数,并使用索引来提取元素:

ex_func <- function(x) {
  x[1]^4 - x[1]^2 - x[2]
}
set.seed(123)

ex_func(runif(2, 0, 1))
#> [1] -0.8641665
9lowa7mx

9lowa7mx2#

这就是do.call的设计目的。runif必须提供as.list

set.seed(42)
do.call(ex_func, as.list(runif(2, 0, 1)))  ## `ex_func` from OP
# [1] -1.073594
yftpprvb

yftpprvb3#

这也是一个tidyverse的解决方案。我们使用大爆炸算子!!!将一个向量拼接成单独的值:

library(rlang)

set.seed(123)
exec(ex_func, !!!runif(2, 0, 1))

[1] -0.8641665

相关问题