[R] using "integrate" in a function definition
Alberto Monteiro
albmont at centroin.com.br
Fri Feb 23 19:18:01 CET 2007
theo borm wrote:
>
>> jjj<-function(www) {2*integrate(dnorm,0,www)$value}
>> kkk<-function(www) {2*(pnorm(www)-0.5)}
>> xxx<-seq(0:5)
>> yyy<-jjj(xxx)
>> zzz<-kkk(xxx)
>
> produces no errors, but:
>> yyy
> [1] 0.6826895
>> zzz
> [1] 0.6826895 0.9544997 0.9973002 0.9999367 0.9999994 1.0000000
>
> Why is this? Is this some R language feature that I've completely missed?
>
Yes. Some functions work on vectors (and matrices), so
when you give a vector, it returns a vector. This is true for
most common functions (sin, cos), arithmetic operations (with
the caveat that different dimensions for the arguments may cause
unexpected outcomes) and some internal functions (dnorm, pnorm).
So, if you write sin(0:10) or dnorm((-3):3), you get a vector.
Some other functions don't, and this is the case with integrate.
For example:
fff <- function(x) x
integrate(fff, 0, 1) # ok
integrate(fff, 0, 1:5) # will integrate from 0 to 1 and ignore 2:5
'plot' will probably fall into some code that uses this
vector-in-vector-out hypothesis, and then fail when the size
of x differs from the size of y.
Alberto Monteiro
PS: fff <- function(x) 1
integrate(fff, 0, 1) # error. why?
More information about the R-help
mailing list