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

通过时间在R中积分函数

通过时间在R中积分函数,r,function,apply,integrate,R,Function,Apply,Integrate,我想对以下关于t的函数进行积分,下界=0,上界=t。我可以用下面的代码来实现这一点,但我的最终目标是为每个t求一个积分值。即使我把t作为一个序列而不是一个值,或者如果我尝试使用sapply,我仍然无法在t的每一步得到积分的值 #initialize constants kap=-0.1527778 alph0<-6 b<-0 po<-0.01 t<-100 gp_st<-integrate(function(t) (1-alph0/(alph0+b*t)*(1-po

我想对以下关于t的函数进行积分,下界=0,上界=t。我可以用下面的代码来实现这一点,但我的最终目标是为每个t求一个积分值。即使我把t作为一个序列而不是一个值,或者如果我尝试使用sapply,我仍然无法在t的每一步得到积分的值

#initialize constants
kap=-0.1527778
alph0<-6
b<-0
po<-0.01
t<-100
gp_st<-integrate(function(t) (1-alph0/(alph0+b*t)*(1-po^kap))^(1/kap),lower=0,upper=t)$value

#try alternate where t is now a sequence 
t<-seq(1:100)
gp_st2<-function(h) sapply(h,gp_st) #still gives length of 1
#初始化常量
kap=-0.1527778

alph0尝试将
gp\u st
作为上限函数,如下所示:

gp_st <- function(h) {
  integrate(function(t) (1-alph0/(alph0+b*t)*(1-po^kap))^(1/kap),lower=0,upper=h)$value
}

gp_st问题是您正在计算gp_st中的积分,而您不想这样做。您需要以下内容:

ff = function(t) {
  (1-alph0/(alph0+b*t)*(1-po^kap))^(1/kap)
}
sapply(1:100, function(ul) {
  integrate(ff, lower = 0, upper = ul)$value
})

当然,有更有效的方法可以做到这一点。

现在,下一步。。。如果我想计算这个函数的几个值,b,po,kap,alph0。。。我猜有一种更有效的方法可以做到这一点,而不是将apply语句嵌套在我想要改变的每个参数的循环中?向量化可能会起作用(使用所有要尝试的值的向量,并将输出设置为数组),但它在概念上可能不直观。循环使用您想要尝试的不同参数组合并不一定不好——尝试一下,看看运行时是什么。谢谢,现在我想评估函数中的几个常量值(alph0,b,po,kap)。您是否建议将这些存储在数据框中,并为每个参数附加值?
ff = function(t) {
  (1-alph0/(alph0+b*t)*(1-po^kap))^(1/kap)
}
sapply(1:100, function(ul) {
  integrate(ff, lower = 0, upper = ul)$value
})