I want to integrate a function fun_integrate
that has a vector vec
as an input parameter:
fun_integrate <- function(x, vec) {
y <- sum(x > vec)
dnorm(x) + y
}
#Works like a charm
fun_integrate(0, rnorm(100))
integrate(fun_integrate, upper = 3, lower = -3, vec = rnorm(100))
300.9973 with absolute error < 9.3e-07
Warning message:
In x > vec :
longer object length is not a multiple of shorter object length
As far as I can see, the problem is the following: integrate
calls fun_integrate
for a vector of x
that it computes based on upper
and lower
. This vectorized call seems not to work with another vector being passed as an additional argument. What I want is that integrate
calls fun_integrate
for each x
that it computes internally and compares that single x
to the vector vec
and I'm pretty sure my above code doesn't do that.
I know that I could implement an integration routine myself, i.e. compute nodes between lower
and upper
and evaluate the function on each node separately. But that wouldn't be my preferred solution.
Also note that I checked Vectorize
, but this seems to apply to a different problem, namely that the function doesn't accept a vector for x
. My problem is that I want an additional vector as an argument.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…