R在求值之前传递给函数的函数的测试参数
我想构造一个函数,我们称它为f,它将得到两个参数 其他功能f1、f2。f1和f2都有自己的参数。 在计算f1和f2之前,我希望f对通过的参数进行一些测试 例如,对于f1和f2,请验证其名称是否相同。 简而言之,我想要这样的东西:R在求值之前传递给函数的函数的测试参数,r,function,arguments,R,Function,Arguments,我想构造一个函数,我们称它为f,它将得到两个参数 其他功能f1、f2。f1和f2都有自己的参数。 在计算f1和f2之前,我希望f对通过的参数进行一些测试 例如,对于f1和f2,请验证其名称是否相同。 简而言之,我想要这样的东西: f<-function(f1(param),f2(param)){ f1Param<-#get the param argument of f1 f2Param<-#get the param argument of f2 stopifnot(iden
f<-function(f1(param),f2(param)){
f1Param<-#get the param argument of f1
f2Param<-#get the param argument of f2
stopifnot(identical(names(f1Param),names(f2Param)))
#evaluate f1(param) and f2(param) and do some opertaions on the outputs
}
但我不确定如何从f1和f2中提取参数,然后得到它们
评价的。
我看到了一些解决这个问题的建议
或
但是在这里给出的示例中,被调用函数所做的唯一事情就是返回其参数,
实际上,我希望我的函数做一些事情。
是否有任何方法可以使用say、match.call在的环境中测试参数
调用函数f,然后决定是否基于
测试结果如何
提前感谢根据Tensibai的建议,您可以执行以下操作:
f <- function(f1, f2, f1Param, f2Param){
stopifnot(is.list(f1Param) && is.list(f2Param))
stopifnot(identical(names(f1Param),names(f2Param)))
do.call(f1, f1Param) == do.call(f2, f2Param)
}
在这种情况下,您最好修改f以接受4个参数、两个函数及其各自的参数作为列表。如果这是不可能的,我认为没有办法实现这一点,因为函数调用是惰性计算的,您不能在函数调用本身之前真正访问它们
> f(mean, mean, list(x = 1:10), list(x = 2:9))
[1] TRUE
> f(mean, mean, list(x = 1:10), list(y = 2:9))
# ERROR