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

Gerrit Draisma gdraisma at xs4all.nl
Tue Nov 15 22:36:47 CET 2011

```Thanks Michael,
Op 11/14/2011 3:30 PM, R. Michael Weylandt schreef:
> You need to explicitly pass th to your function with the ... argument
> of integrate.
That was a point I was missing!
Thanks again,
This solved my problems for this time.
Gerrit.

>
> E<- function(th){
>      integrate(function(x,th) x*g(x, th), 0, Inf, th)\$value
> }
>
> Also, it's value, not Value, which might be producing errors of another sort.
>
> Michael
>
> On Mon, Nov 14, 2011 at 9:16 AM, Gerrit Draisma<gdraisma at xs4all.nl>  wrote:
>> Thanks Michael,
>>
>> I see now how to include integrate function in the EV function.
>> And apologies:
>> I now realize that my code was sloppy.
>> I intended to write
>>> E<- function(th) {
>>> +      integrate( f = function(x,th){x*g(x,th)},
>>> +      0,Inf)\$Value}
>>> E(1/10)
>> But that does not work either,
>>
>> Gerrit.
>>
>> Op 11/14/2011 2:50 PM, R. Michael Weylandt schreef:
>>>
>>> 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