我有这4个两个变量的函数:
inner.a0b0<- function(tvar,gamma){
return(gamma^(1/2)*(1+tvar)^(-(gamma+1)/2)*exp(-tvar/2))}
K0.inte.func <- function(tvar,gam){return((1-tvar)*(exp(-tvar)-gam^(-1/2)*(1+tvar)^(-(gam+1)/2)*exp(-tvar/2)))}
unit.l.func <- function(tvar,gam){return((1+tvar)^((gam+1)/2)*exp(-tvar/2))}
beta.G <- function(tvar,gam){(1+tvar)^((gam+1)/2)*exp(-tvar/2)*(1-tvar))}我有两个不同的样本,从中我得到了估计的lambda.es =c(λes.1,λes.2)。
然后我通过如下积分得到两个分量的两个向量:
K0.deno <- sapply(lambda.es, function(x) integrate(inner.a0b0,lower=0,upper=Inf,gam=x)$value)
K0.inte.val<- sapply(lambda.es, function(x) integrate(K0.inte.func,lower=0,upper=Inf,gam=x)$value) 我现在的目标是:首先,我从unit.l.func和beta.G以及向量K0.deno和K0.inte.val定义了两个函数(每个函数对应于lambda.es的一个组件),所以我写道:
K0.operator.b <- function(tvar, gam, deno,inte.val){res<- beta.G(tvar,gam) - (1-deno)*unit.l.func(tvar,gam)*inte.val
return(res)}基本上,我希望有两个函数b1.til和b2.til,如下所示:
b1.til <- K0.operator.b(tvar,gam,deno=K0.deno[1],inte.val=K0.inte.val[2])
b2.til <- K0.operator.b(tvar,gam,deno=K0.deno[2],inte.val=K0.inte.val[2])然后,我再次需要将b1.til和b2.til与gam=lambda.es集成。我怎么能不写两遍所有的东西呢?非常感谢您的关注。任何建议/帮助都是非常感谢的。我也非常感谢对代码的任何批评。非常感谢。
发布于 2016-04-01 10:36:26
我认为这应该会成功,但实际上你应该提供真实的测试用例来进行测试。目前,我们没有可用于测试的unit.l.func或deno或val的值,也没有任何测试用例,您知道答案应该是什么。
尝试返回在这两个值可用时定义的函数。然后,该函数应将它们作为其环境的一部分进行继承。这被称为“闭包”:
function1 <- function(tvar, gam)
{ function(tvar, gam){ beta.G(tvar,gam) - 1/(1-deno[1])*(unit.l.func( tvar, gam)-1)*val[1]}
}
function2 <- function(tvar, gam)
{ function(tvar, gam){ beta.G(tvar,gam) - 1/(1-deno[2])*(unit.l.func( tvar, gam)-1)*val[2]}
}https://stackoverflow.com/questions/36346802
复制相似问题