[R] integrate function

David Winsemius dwinsemius at comcast.net
Sun Dec 6 04:45:58 CET 2009


I did get it to "work" with  Vectorize. My problem was that I don't  
know if the answer made sense because I could not tell what  
mathematical underpinnings were being studied.

-- 
David.


On Dec 5, 2009, at 10:05 PM, li li wrote:

> Thank you all very much!
> Yes, f2 is the function I wanted to write. I tried to do use  
> "Vectorize" function to f1, it did not work.
> > f2 <- function(x)
> +      {
> +      integrate(Vectorize(f1,vectorize.args =p), lower=0,upper=1, x)
> +       }
> > f2(c(2,3))
> Error in Vectorize(f1, vectorize.args = p) :
>   must specify formal argument names to vectorize
>
> I do not quite understand the logic why we need to vectorize here.
> 2009/12/5 Ravi Varadhan <rvaradhan at jhmi.edu>
> Here is how you can do it:
>
>
> f1 <- function (p,x) {
> sapply(p, function(p) prod( p*x+(1-p)*x^2) )  # the function should  
> be vectorized for `integrate'
> }
>
>  f2 <- function(x) {
> integrate(f1, 0, 1, x)$val  # you need to only return the `value' of  
> integration
> }
>
> f2(x=1:3)
>
> Hope this helps,
> Ravi.
>
> ____________________________________________________________________
>
> Ravi Varadhan, Ph.D.
> Assistant Professor,
> Division of Geriatric Medicine and Gerontology
> School of Medicine
> Johns Hopkins University
>
> Ph. (410) 502-2619
> email: rvaradhan at jhmi.edu
>
>
> ----- Original Message -----
> From: li li <hannah.hlx at gmail.com>
> Date: Saturday, December 5, 2009 7:13 pm
> Subject: Re: [R] integrate function
> To: David Winsemius <dwinsemius at comcast.net>
> Cc: r-help at r-project.org
>
>
> > Thank you very much for your reply!
> >  It is not an assignment.
> >  What I want to do is what we often do.  If we have a bivariate
> > function of x
> >  and p,
> >  I first fix x and integrate out p. Then the resultant function is
> > only in
> >  terms of x.
> >
> >
> >  Here f1 is a  bivariate function of x and p.
> >  > f1 <- function (p,x)
> >  +   {
> >  +    prod(p*x+(1-p)*x^{2})
> >        }
> >
> >  f2 is a function of x only after integrating out p from f1. Here f1
> > is the
> >  integrand, x is the additional argument to be
> >  passed to f1. The integration is in terms of p.
> >
> >  > f2 <- function(x)
> >  +     {
> >  +     integrate(f1, lower=0,upper=1, x)
> >  +      }
> >  There is error output when I evaluate f2 at specific x values.  
> See below:
> >
> >  > f2(c(2,3))
> >  Error in integrate(f1, lower = 0, upper = 1, x) :
> >    evaluation of function gave a result of wrong length
> >  In addition: Warning messages:
> >  1: In p * x :
> >    longer object length is not a multiple of shorter object length
> >  2: In (1 - p) * x^{ :
> >    longer object length is not a multiple of shorter object length
> >
> >
> >  Can any one give me some suggestions! Thank you!
> >  2009/12/5 David Winsemius <dwinsemius at comcast.net>
> >
> >  >
> >  > On Dec 5, 2009, at 4:59 PM, li li wrote:
> >  >
> >  > Hello,
> >  >>  I have some trouble in terms of using integrate function in R.
> >  >>
> >  >> f1 is a function of p and x where x is supposed to be a vector.
> > (See the
> >  >> code).
> >  >> Then I want to write function f2 which is a function of the  
> vector
> >  >> x after I integrate out p.
> >  >>  Can some one give me some help? Many thanks!
> >  >>                            Hannah
> >  >>
> >  >> f1 <- function (p,x)
> >  >>>
> >  >> +   {
> >  >> +    y <- p*x+(1-p)*x^{2}
> >  >> +       prod(y)
> >  >> +   }
> >  >>
> >  >>>
> >  >>> f2 <- function(x)
> >  >>>
> >  >> +     {
> >  >> +     integrate(f1, 0,1, x)
> >  >>
> >  >
> >  > Just looking at the help page for integrate makes me wonder what
> > you are
> >  > doing. There are 3 named arguments before the dots, so 0 and 1  
> will
> > become
> >  > "lower" and "upper", while x is not among the named arguemnts,  
> so I
> > suppose
> >  > x will go to f1 as "p". But f1 takes two arguments, so where will
> > it get the
> >  > second argument? Maybe if you would tell us a bit more about why
> > you made
> >  > those functions the way you did, it would help. I am guessing  
> it's
> > classwork
> >  > but perhaps not.
> >  >
> >  >
> >  > +      }
> >  >>
> >  >> f2(x=c(1,2))
> >  >>>
> >  >> Error in integrate(f1, 0, 1, x) :
> >  >>  evaluation of function gave a result of wrong length
> >  >> In addition: Warning messages:
> >  >> 1: In p * x :
> >  >>  longer object length is not a multiple of shorter object length
> >  >> 2: In (1 - p) * x^{ :
> >  >>  longer object length is not a multiple of shorter object length
> >  >>
> >  >>        [[alternative HTML version deleted]]
> >  >>
> >  >
> >  > --
> >  >
> >  > David Winsemius, MD
> >  > Heritage Laboratories
> >  > West Hartford, CT
> >  >
> >  >
> >
> >       [[alternative HTML version deleted]]
> >
> >  ______________________________________________
> >  R-help at r-project.org mailing list
> >
> >  PLEASE do read the posting guide
> >  and provide commented, minimal, self-contained, reproducible code.
>

David Winsemius, MD
Heritage Laboratories
West Hartford, CT



More information about the R-help mailing list