问题描述
|
如何在R中实现函数
apply.func(func,arg.list)
,该函数将任意函数func
和合适的列表arg.list
作为参数,并返回用arg.list
中包含的参数调用func
的结果。例如。
apply.func(foo,list(x=\"A\",y=1,z=TRUE))
相当于
foo(x=\"A\",z=TRUE)
谢谢!
附言FWIW,相当于ѭ7的Python类似于
def apply_func(func,arg_list):
return func(*arg_list)
要么
def apply_func(func,kwarg_dict):
return func(**kwarg_dict)
或其某些变体。
解决方法
我想找10英镑是您要找的东西。您可以通过
?do.call
阅读。
人们如何使用“ 10”的经典示例是将“ 13”个数据帧或矩阵一起使用:
d1 <- data.frame(x = 1:5,y = letters[1:5])
d2 <- data.frame(x = 6:10,y = letters[6:10])
do.call(rbind,list(d1,d2))
这是另一个使用sum
的琐碎示例:
do.call(sum,list(1:5,runif(10)))
, R允许将函数作为参数传递给函数。这意味着您可以按以下方式定义apply.func
(其中f
是函数,而...
表示所有其他参数:
apply.func <- function(f,...)f(...)
然后,您可以使用ѭ7来指定参数有意义的任何函数:
apply.func(paste,1,2,3)
[1] \"1 2 3\"
apply.func(sum,3)
[1] 6
但是,请注意,以下内容可能不会产生预期的结果,因为mean
将向量作为参数:
apply.func(mean,3)
[1] 1
请注意,还有一个称为do.call
的基本R函数,可以有效地执行相同的操作。