集成多个函数

时间:2017-11-06 08:42:28

标签: r

假设您有以下代码

X = cbind(5,3,4)
func <- function(t){
   return(X*t)
}

然后func(5)产生向量(25,15,20)

现在我要解决三个积分int(5t,dt,0,5)int(3t,dt,0,5)int(4t,dt,0,5)。不幸的是,这不适用于

integrate(func,lower=0,upper=10)$value

如果没有for循环,有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

现在我明白了。

你可以定义func来返回像这样的函数

func <- function(t){
    function(v){v*t}
}

现在func(5)返回一个函数,该函数将其参数与5

进行多重匹配
t <- func(5)
t(5)
[1] 25

现在整合你可以使用lapply的三个功能

lapply(X,function(t){integrate(func(t),0,5)})

如果需要更多变量,您可以相应地更改代码

func <- function(V,y,w){
    function(t){1/V * pmax.int(-c, pmin.int((y-t)/V,c))*w}
}

只有列表我们需要稍微改变一下。我在这里使用包purrr来列出每个包含一组不同变量的列表。

V = c(1,2,3) ;c = 2; y = c(5,6,7); w = c(8,9,10); z = c(8,10,11) 
L <- list(V = V,y = y, w = w,z = z)
L2 <- L %>% transpose()

lapply的最终调用将如下所示。

lapply(L2,function(vars){integrate(func(vars$V,vars$y,vars$w),vars$y,vars$z)})