# [R] vectorizing a function

Robin Hankin r.hankin at auckland.ac.nz
Wed Oct 23 03:32:00 CEST 2002

```Dear R-xperts

I have just written a little hypergeometric function, included below
[the hypergeometric function crops up when solving a common type of
ODE].

It works fine on single values of the primary argument z, but
vectorizing it is getting confusing.

The best I have come up with so far just tests for z being longer than
1 and if so, uses sapply() recursively.  This is fine, except that it
doesn't preserve the dimensions correctly if z is a matrix or an
array.  And the function doesn't work properly if z is a scalar but A
is a vector.

besselI() does The Right Thing (tm), but it is internal ; what is the
best way to vectorize this type of function?

hypergeo <- function(A,B,C,z,tol=1e-6){
if(length(z) > 1) {
return(sapply(z,hypergeo,A=A,B=B,C=C,tol=tol))
} else {
term <- tmp <- 1

for(n in 1:100){
term <- term*A*B/C
term=term*z/n

partial.sum <- tmp + term
if ((abs(partial.sum-tmp)<tol) || is.infinite(partial.sum)){return(partial.sum)}
A <- A+1
B <- B+1
C <- C+1
tmp <- partial.sum
}
return (NaN)
}
}

--

Robin Hankin, Lecturer,
School of Geography and Environmental Science
Tamaki Campus
Private Bag 92019 Auckland
New Zealand

r.hankin at auckland.ac.nz
tel 0064-9-373-7599 x6820; FAX 0064-9-373-7042

as of: Wed Oct 23 14:25:00 NZDT 2002
This (linux) system up continuously for:  419 days, 20 hours, 07 minutes
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._

```