S speedup in R
Bill Simpson
wsimpson@uwinnipeg.ca
Tue, 7 Jul 1998 16:17:51 -0500 (CDT)
Venables and Ripley describe a speedup where you take a structure like
x<-NULL
for(i in sequence)
y<-c(y,function(x,i))
and convert it to one like
x<-numeric(its length)
for(i in sequence)
y[i]<-function(x,i)
I tried this speedup on some simple examples and it made them twice as
fast.
But now I am hitting a snag with some real code.
This original version works:
cif<-function(x, y, tau, h=tau[2]-tau[1])
{
# conditional cross-intensity function for two point process realizations.
# estimated at tau.
# x and y are vectors of event times (sorting is not necessary).
# tau is the lag (or vector of lags)
# h is binwidth.
# see Brillinger, Bryant, & Segundo (1976) eq 13, mhatAB(u)
n <- length(x)
cif.numerator <- NULL
for(tt in tau)
{
point.counter <- sum(round(rank(c(x + tt + h/2, y))[1:n], 0) -
round(rank(c(x + tt - h/2, y))[1:n], 0))
cif.numerator <- c(cif.numerator,point.counter)
}
cif.numerator/(n * h)
}
But the sped-up version just returns a vector of zeros:
cif<-function(x, y, tau, h=tau[2]-tau[1])
{
# conditional cross-intensity function for two point process realizations.
# estimated at tau.
# x and y are vectors of event times (sorting is not necessary).
# tau is the lag (or vector of lags)
# h is binwidth.
# see Brillinger, Bryant, & Segundo (1976) eq 13, mhatAB(u)
n <- length(x)
cif.numerator <- numeric(length(tau))
for(tt in tau)
{
cif.numerator[tt] <- sum(round(rank(c(x + tt + h/2, y))[1:n], 0) -
round(rank(c(x + tt - h/2, y))[1:n], 0))
}
cif.numerator/(n * h)
}
I can't see why this isn't working. Is this hitting a peculiarity of
R? Thanks very much for any help.
Bill Simpson
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel 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-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._