# [R] how to include integrate in a function that can be solved with uniroot?

Gerrit Draisma gdraisma at xs4all.nl
Mon Nov 14 11:32:54 CET 2011

```Hallo,
I am trying to define expectation as an integral
and use uniroot to find the distribution parameter
for a given expectation.

However I fail to understand how to define properly
the functions involved and pass the parameters correctly.

Can anyone help me out?

Thanks,
Gerrit Draisma.

This what I tried:
=======
> # exponential density
> g <- function(x,lambda){ lambda *exp(-lambda*x) }
>
> # expectation with lambda=1/10
> integrate(f = function(x,lambda=1/10) {x*g(x,lambda)}, 0,Inf)
10 with absolute error < 6.7e-05
>
> # *how to write this as a function?*
> E <- function(lambda) {
+      integrate( f = function(x,th){x*g(x,lambda)},
+      0,Inf)\$Value}
> E(1/10)
NULL
>
> # *how to include this function in uniroot to find lambda*
> # *for a given expectation?*
> mu <- 10
> uniroot(f<-function(th){E(th)-mu},lower=1,upper=100)
Error in if (is.na(f.lower)) stop("f.lower = f(lower) is NA") :
argument is of length zero
>
========

```