[R] integrate function
Ravi Varadhan
rvaradhan at jhmi.edu
Sun Dec 6 03:53:11 CET 2009
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.
More information about the R-help
mailing list