Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R在求值之前传递给函数的函数的测试参数_R_Function_Arguments - Fatal编程技术网

R在求值之前传递给函数的函数的测试参数

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,它将得到两个参数 其他功能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(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