updateCelUnits {affxparser} | R Documentation

## Updates a CEL file unit by unit

### Description

Updates a CEL file unit by unit.

Please note that, contrary to `readCelUnits`(), this method can only update a single CEL file at the time.

### Usage

    updateCelUnits(filename, cdf=NULL, data, ..., verbose=0)

### Arguments

`filename` | The filename of the CEL file.
`cdf` | A (optional) CDF `list` structure either with field `indices` or fields `x` and `y`. If `NULL`, the unit names (and from there the cell indices) are inferred from the names of the elements in `data`.
`data` | A `list` structure in a format similar to what is returned by `readCelUnits`() for a single CEL file only.
`...` | Optional arguments passed to `readCdfCellIndices`(), which is called if `cdf` is not given.
`verbose` | An `integer` specifying how much verbose details are outputted.

### Value

Returns what `updateCel`() returns.

### Working with re-arranged CDF structures

Note that if the `cdf` structure is specified the CDF file is not queried, but all information about cell x and y locations, that is, cell indices is expected to be in this structure. This can be very useful when one work with a cdf structure that originates from the underlying CDF file, but has been restructured for instance through the `applyCdfGroups`() method, and `data` correspondingly. This update method knows how to update such structures too.

### Author(s)

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

### See Also

Internally, `updateCel`() is used.

### Examples

    for (zzz in 0) {

    # CEL file to use in this demostration
    pathname <- "tmp.cel"
    if (!file.exists(pathname)) {
      # Scan current directory for a CEL file
      file <- findFiles(pattern="[.](c|C)(e|E)(l|L)$")
      if (is.null(file))
        break

      # Work on a copy of the CEL file
      cat("Copying CEL file: ", file, "\n", sep="");
      if (!file.copy(file, pathname))
        stop("Failed to copy CEL file: ", file);
      rm(file)
    }

    # Check for the CDF file
    hdr <- readCelHeader(pathname)
    cdfFile <- findCdf(hdr$chiptype)
    if (is.null(cdfFile))
      break

    hdr <- readCdfHeader(cdfFile)
    nbrOfUnits <- hdr$nunits
    print(nbrOfUnits);

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    # Example: Read and re-write the same data
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    units <- c(101, 51)
    data1 <- readCelUnits(pathname, units=units, readStdvs=TRUE)
    cat("Original data:\n")
    str(data1)
    updateCelUnits(pathname, data=data1)
    data2 <- readCelUnits(pathname, units=units, readStdvs=TRUE)
    cat("Updated data:\n")
    str(data2)
    stopifnot(identical(data1, data2))

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    # Example: Random read and re-write "stress test"
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    for (kk in 1:10) {
      nunits <- sample(min(1000,nbrOfUnits), size=1)
      units <- sample(nbrOfUnits, size=nunits)
      cat(sprintf("%02d. Selected %d random units: reading", kk, nunits));
      t <- system.time({
        data1 <- readCelUnits(pathname, units=units, readStdvs=TRUE)
      }, gcFirst=TRUE)[3]
      cat(sprintf(" [%.2fs=%.2fs/unit], updating", t, t/nunits))
      t <- system.time({
        updateCelUnits(pathname, data=data1)
      }, gcFirst=TRUE)[3]
      cat(sprintf(" [%.2fs=%.2fs/unit], validating", t, t/nunits))
      data2 <- readCelUnits(pathname, units=units, readStdvs=TRUE)
      stopifnot(identical(data1, data2))
      cat(". done\n")
    }

    } # for (zzz in 0)

[Package affxparser version 1.6.2 Index]