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

R. Michael Weylandt michael.weylandt at gmail.com
Mon Nov 14 14:50:23 CET 2011

```Try this:

EV <- function(lamb){
fnc <- function(x) x * dexp(x, lamb)
integrate(fnc, 0, Inf)\$value
}

Your problem is that there's nothing to translate th to lambda in your
code for E.

Michael

On Mon, Nov 14, 2011 at 5:32 AM, Gerrit Draisma <gdraisma at xs4all.nl> wrote:
> 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
>>
> ========
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help