updateCel             package:affxparser             R Documentation

_U_p_d_a_t_e_s _a _C_E_L _f_i_l_e

_D_e_s_c_r_i_p_t_i_o_n:

     Updates a CEL file.

_U_s_a_g_e:

     updateCel(filename, indices=NULL, intensities=NULL, stdvs=NULL, pixels=NULL, writeMap=NULL, ..., verbose=0)

_A_r_g_u_m_e_n_t_s:

filename: The filename of the CEL file.

 indices: A 'numeric' 'vector' of cell (probe) indices specifying which
          cells to updated.  If 'NULL', all indices are considered.

intensities: A 'numeric' 'vector' of intensity values to be stored.
          Alternatively, it can also be a named 'data.frame' or
          'matrix' (or 'list') where the named columns (elements) are
          the fields to be updated.

   stdvs: A optional 'numeric' 'vector'.

  pixels: A optional 'numeric' 'vector'.

writeMap: An optional write map.

     ...: Not used.

 verbose: An 'integer' specifying how much verbose details are
          outputted.

_D_e_t_a_i_l_s:

     Currently only binary (v4) CEL files are supported. The current
     version of the method does not make use of the Fusion SDK, but its
     own code to navigate and update the CEL file.

_V_a_l_u_e:

     Returns (invisibly) the pathname of the file updated.

_A_u_t_h_o_r(_s):

     Henrik Bengtsson (<URL: http://www.braju.com/R/>)

_E_x_a_m_p_l_e_s:

     ##############################################################
     if (require("AffymetrixDataTestFiles")) {            # START #
     ##############################################################

     # Search for some available Calvin CEL files
     path <- system.file("rawData", package="AffymetrixDataTestFiles")
     files <- findFiles(pattern="[.](cel|CEL)$", path=path, recursive=TRUE, firstOnly=FALSE)
     files <- grep("FusionSDK_HG-U133A", files, value=TRUE)
     files <- grep("Calvin", files, value=TRUE)
     file <- files[1]

     # Convert to an XDA CEL file
     filename <- file.path(tempdir(), basename(file))
     if (file.exists(filename))
       file.remove(filename)
     convertCel(file, filename)

     fields <- c("intensities", "stdvs", "pixels")

     # Cells to be updated
     idxs <- 1:2

     # Get CEL header
     hdr <- readCelHeader(filename)

     # Get the original data
     cel <- readCel(filename, indices=idxs, readStdvs=TRUE, readPixels=TRUE)
     print(cel[fields])
     cel0 <- cel

     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     # Square-root the intensities
     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     updateCel(filename, indices=idxs, intensities=sqrt(cel$intensities))
     cel <- readCel(filename, indices=idxs, readStdvs=TRUE, readPixels=TRUE)
     print(cel[fields])

     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     # Update a few cell values by a data frame
     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     data <- data.frame(
       intensities=cel0$intensities,
       stdvs=c(201.1, 3086.1)+0.5,
       pixels=c(9,9+1)
     )
     updateCel(filename, indices=idxs, data)

     # Assert correctness of update
     cel <- readCel(filename, indices=idxs, readStdvs=TRUE, readPixels=TRUE)
     print(cel[fields])
     for (ff in fields) {
     #  stopifnot(all.equal(cel[[ff]], data[[ff]], .Machine$double.eps^0.25))
     }

     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     # Update a region of the CEL file
     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     # Load pre-defined data
     side <- 306
     pathname <- system.file("extras/easternEgg.gz", package="affxparser")
     con <- gzfile(pathname, open="rb")
     z <- readBin(con=con, what="integer", size=1, signed=FALSE, n=side^2)
     close(con)
     z <- matrix(z, nrow=side)
     side <- min(hdr$cols - 2*22, side)
     z <- as.double(z[1:side,1:side])
     x <- matrix(22+0:(side-1), nrow=side, ncol=side, byrow=TRUE)
     idxs <- as.vector((1 + x) + hdr$cols*t(x))
     # Load current data in the same region
     z0 <- readCel(filename, indices=idxs)$intensities
     # Mix the two data sets
     z <- (0.3*z^2 + 0.7*z0)
     # Update the CEL file
     updateCel(filename, indices=idxs, intensities=z)

     # Make some spatial changes
     rotate270 <- function(x, ...) {
       x <- t(x)
       nc <- ncol(x)
       if (nc < 2) return(x)
       x[,nc:1,drop=FALSE]
     }

     # Display a spatial image of the updated CEL file
     cel <- readCelRectangle(filename, xrange=c(0,350), yrange=c(0,350))
     z <- rotate270(cel$intensities)
     sub <- paste("Chip type:", cel$header$chiptype)
     image(z, col=gray.colors(256), axes=FALSE, main=basename(filename), sub=sub)
     text(x=0, y=1, labels="(0,0)", adj=c(0,-0.7), cex=0.8, xpd=TRUE)
     text(x=1, y=0, labels="(350,350)", adj=c(1,1.2), cex=0.8, xpd=TRUE)

     # Clean up
     file.remove(filename)
     rm(files, cel, cel0, idxs, data, ff, fields, rotate270)

     ##############################################################
     }                                                     # STOP #
     ##############################################################

