
Changes from EBarrays_1.0:

Two major changes were planned --

1. To make it work with bioconductor
2. To make it faster

This file is a rough log of changes of the SECOND type:

 o data$int.data is made a matrix instead of a data frame
   (as.matrix.data.frame was taking a lot of time)

 o subset data$int.data[data$all.pos, ] taken at the very beginning in
   em, since the repeated subsetting inside complete.loglik was taking
   time

 o In the f0 functions, not all the data are passed. A list of the
   required data-based quantities are made at the beginning (there are
   as many sets as the total number of patterns). These are passed to
   the f0 function. This takes a bit more memory. Maybe we should
   eventually allow a 'optimize.memory' option and compare speed.

 o The f0 function reimplemented from scratch for the LNN case. In
   particular, for variance matrix 

   \Sigma = \sigma^2 I_n + \tao^2 M_n

   the determinant has an explicit form, allowing us to avoid svd() etc.

 o in the E-step, zhat[i,] -> p * exp(zhat[i]) -> normalize (so that
   sums to 1) --- this process was sometimes not working well because
   sometimes all zhat's in a row were very small, hence exp(z) == 0,
   hence sum 0, hence NaN's. Worked around this by something like 

   exp(z_ij) /  \Sum_k exp(z_ik) = 1 /  \Sum_k exp(z_ik - z_ij)

   (this part implemented in C, as otherwise there would have been an
   unnecessary speed penalty)
