Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.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_Dynamic - Fatal编程技术网

R 通过嵌套函数传递参数

R 通过嵌套函数传递参数,r,dynamic,R,Dynamic,我通过多个函数传递相同的参数,部分代码如下 inner.integral <-function(f,n,i,x,odds,alpha,beta) { beta.func(x,alpha,beta) * ( beta.prob(alpha,beta) * eval(call(paste("func",as.character(i),as.character(alpha+1),sep=".")),(x*(1+f*odds)))+(1-beta.prob(alpha,beta))*eval(

我通过多个函数传递相同的参数,部分代码如下

inner.integral <-function(f,n,i,x,odds,alpha,beta)
{ 
 beta.func(x,alpha,beta) * ( beta.prob(alpha,beta) * eval(call(paste("func",as.character(i),as.character(alpha+1),sep=".")),(x*(1+f*odds)))+(1-beta.prob(alpha,beta))*eval(call(paste("func",as.character(i),as.character(alpha),sep=".")),(x*(1-f))))
}

inner.integral.int <- function(f,n,i,x,odds,alpha,beta) {
  integrate(inner.integral,lower=0,upper=1,n=n,i=i,
             x=x,odds=odds,alpha=alpha,beta=beta)
}

inner.integral.int.2 <- function(f,n,i,x,odds,alpha,beta) {
  y <- inner.integral.int(f,n,i,x,odds,alpha,beta)$value
  return(y)
}
对于定义的最小f、最大f、n、i、x等,我收到错误:

Error in paste("func", as.character(i), as.character(alpha + 1), sep = ".") : 
  argument "i" is missing, with no default

我做错了什么?

我想你可能在R的懒惰评估中遇到了问题。您的示例非常复杂(请查看您包含的所有参数),但作为第一步,请尝试添加以下行:

force(i)
在您的功能中,即

inner.integral.int <- function(f,n,i,x,odds,alpha,beta) {
    force(i)
    integrate(inner.integral,lower=0,upper=1,n=n,i=i,
             x=x,odds=odds,alpha=alpha,beta=beta)
}

internal.integral.int您应该做的第一件事是清理代码。您不希望有一行245个字符长的代码

您还应该避免
eval(调用(粘贴(
除非这是绝对必要的,但这里不是。至少,您可以切换到使用
do.call
,它可以传递字符串和输入列表,并且不需要创建
call
对象。但是更好的做法是避免将函数名作为字符串进行操作,或者ine
func
i
alpha
作为输入(以及当前输入),或者创建一个函数列表
func[[i]
,每个函数都将
alpha
作为输入

最有可能的是,如果你这样做,问题要么消失,要么变得明显

inner.integral.int <- function(f,n,i,x,odds,alpha,beta) {
    force(i)
    integrate(inner.integral,lower=0,upper=1,n=n,i=i,
             x=x,odds=odds,alpha=alpha,beta=beta)
}