[BioC] limma: out of bounds error

Gordon Smyth smyth at wehi.edu.au
Wed Jan 21 02:13:35 MET 2004

Dear Juerg,

The problem that you mention arises from the fact that SMD does not store 
blank spots, i.e., rows corresponding to blank spots are removed from the 
database. Limma doesn't cope with this because it assumes complete arrays. 
On the other hand, the marrayNorm package does have a facility to handle 
this using the 'subset' slot of the marrayRaw object. Beware though that if 
you use marrayNorm, bugs in the treatment of weights (FLAGs) means that you 
will have to normalize your arrays one at a time.

Thanks for forwarding the code fix. I'm not sure that the simple fix that 
you've implemented will always allocate spots to the correct tip groups 
though. I have been discussing with Jean Yang how to bring the the 'subset' 
concept into limma, but it is some way off.


At 09:06 AM 21/01/2004, Straubhaar, Juerg wrote:
>Dear Dr. Smyth,
>I am analysing a series of two-colour microarray data sets with limma. The 
>sets were downloaded from SMD (Standford Microarray Database) and I read 
>the data with the command:
>targets <- readTargets('N20targets.txt')
>RG<-read.maimages(targets$FileName, source="smd", fill=T, 
>wt.fun=function(x) {return(x$FLAG)})
>After reading the gal file and layout I proceeded with the normalization:
>This function terminated prematurely with an 'out of bounds' error. I 
>found the error in the printtiploess code block of the 
>normalizeWithinArrays function. The layout with 8 X 4 print grids, each 
>containing 650 spots, provides for 20800 spots. The chips I am using have 
>20736 spots. I added a small amount of code to your 
>normalizeWithinArrays() which eliminated the error. The code I added is 
>(after #comment)
>        printtiploess = {^M
>             if(is.null(layout)) stop("Layout argument not specified")^M
>             ngr <- layout$ngrid.r^M
>             ngc <- layout$ngrid.c^M
>             nspots <- layout$nspot.r * layout$nspot.c^M
>             for (j in 1:narrays) {^M
>                 spots <- 1:nspots^M
>                 for (gridr in 1:ngr)^M
>                 for (gridc in 1:ngc) {^M
># modified: SMD data files smaller than ngr * ngc * spots!^M
>                     if(spots[nspots] > nrow(object$M)) {^M
>                         index <- spots[1]^M
>                         spots <- index:nrow(object$M)^M
>                     }^M
>                     y <- object$M[spots,j]^M
>                     x <- object$A[spots,j]^M
>                     w <- weights[spots,j]^M
>                     object$M[spots,j] <- 
> loessFit(y,x,w,span=span,iterations=iterations)$residuals^M
>                     spots <- spots + nspots^M
>                 }^M
>             }^M
>         },^M
>I am using limma version limma_1.3.13.
>Kind regards,
>Juerg Straubhaar, PhD
>Umass Med

More information about the Bioconductor mailing list