if (require("AffymetrixDataTestFiles") && packageVersion("AffymetrixDataTestFiles") >= "0.4.0") {
library("affxparser")
pathR <- system.file(package="AffymetrixDataTestFiles")
pathA <- file.path(pathR, "annotationData", "chipTypes", "HuGene-1_0-st-v1")
# Read PGF structure
pgf <- file.path(pathA, "HuGene-1_0-st-v1.r4,10_probesets.pgf")
# NOTE: Hard-coded
Jall <- 10L
# Various sets of indices to be read
idxsList <- list(
## readNothing=integer(0L), # FIX ME
readAll=NULL,
readOne=5L,
readSome=1:5,
readDouble=as.double(1:5),
outOfRange=-1L,
outOfRange=0L,
outOfRange=1e9L
)
data <- readPgf(pgf)
str(head(data))
stopifnot(identical(data$header$chip_type, "HuGene-1_0-st-v1"))
stopifnot(length(data$probesetName) == Jall)
# Read different subsets of units
for (ii in seq_along(idxsList)) {
name <- names(idxsList)[ii]
message(sprintf("Testing readPgf() with '%s' indices...", name))
idxs <- idxsList[[ii]]
str(list(idxs=idxs))
if (grepl("outOfRange", name)) {
res <- tryCatch(readPgf(pgf, indices=idxs), error=function(ex) ex)
str(res)
stopifnot(inherits(res, "error"))
} else {
data <- readPgf(pgf, indices=idxs)
str(head(data))
stopifnot(identical(data$header$chip_type, "HuGene-1_0-st-v1"))
J <- if (is.null(idxs)) Jall else length(idxs)
stopifnot(length(data$probesetName) == J)
}
message(sprintf("Testing readPgf() with '%s' indices...done", name))
} # for (ii ...)
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Validate correctness of subsets
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
subsetPgf <- function(data, indices=NULL, ...) {
if (is.null(indices)) return(data)
# Atoms
offsets <- data$probesetStartAtom
natoms <- diff(c(offsets, length(data0$atomStartProbe)+1L))
offsets <- offsets[indices]
natoms <- natoms[indices]
# Identify atoms to keep
keep <- logical(length(data$atomStartProbe))
for (kk in seq_along(offsets)) {
keep[seq(from=offsets[kk], by=1L, length=natoms[kk])] <- TRUE;
}
for (ff in c("probeSequence", "probeId", "probeGcCount", "atomExonPosition", "atomId", "probeInterrogationPosition", "probeLength", "probeType")) {
data[[ff]] <- data[[ff]][keep]
}
data$atomStartProbe <- seq_len(sum(natoms))
data$probesetStartAtom <- c(1L, cumsum(natoms))[length(indices)]
# Probesets
for (ff in c("probesetName", "probesetId", "probesetType")) {
data[[ff]] <- data[[ff]][indices]
}
data
} # subsetPgf()
data0 <- readPgf(pgf)
Jall <- length(data0$probesetId)
for (kk in 1:10) {
n <- sample(Jall, size=1L)
idxs <- sort(sample(1:Jall, size=n, replace=FALSE))
data <- readPgf(pgf, indices=idxs)
dataS <- subsetPgf(data0, indices=idxs)
for (ff in c("probesetStartAtom", "atomExonPosition"))
data[[ff]] <- dataS[[ff]] <- NULL
stopifnot(all.equal(data, dataS))
}
} # if (require("AffymetrixDataTestFiles"))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.