假设您有以下代码
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循环,有人可以帮我解决这个问题吗?
答案 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)})