swh:1:snp:a4c99a50dc49f82b591f268001b320f8c3ca0041
Raw File
Tip revision: dc000f2a5f006d137f66716b086025d618bf8306 authored by John M Chambers on 14 July 2008, 00:00:00 UTC
version 1.0-5
Tip revision: dc000f2
dataFrame.R
setClass("dataFrame1",
  representation(row.names = "character", names = "character"),
  contains = "list")

setClass("dataFrame2", 
  representation(variables = "list",
    colNames = "character", rowNames = "character"))

setClassUnion("dataFrame",
        c("data.frame", "dataFrame1", "dataFrame2"))

## requireMethods("dimnames", "dataFrame")
## requireMethods("dim", "dataFrame")

setMethod("dim", "dataFrame1", function(x) {
    nr = length(x@row.names)
    if(nr == 0 && length(x) > 0)
      nr = length(x[[1]])
    c(nr, length(x))
})

setMethod("[", "dataFrame1", base::`[.data.frame` )#]

setValidity("dataFrame", function(object) {
    msg <- character()
    dims <- dim(object)
    if(length(dims) != 2)
      return(paste("dim() not of length 2 (got", length(dims), ")"))
    nRow <- dims[[1]]
    nVar <- dims[[2]]
    if(nVar > 0) {
        varLens <- numeric(nVar)
        for(j in seq(length = nVar))
          varLens[[j]] <- length(object[, j])
        nR2 = unique(varLens)
        if(length(nR2) > 1)
          msg <-  c(msg,
                    paste("Variables (columns) not of equal length: ", paste(nR2, collapse = ", ")))
        if(any(is.na(match(nR2, nRow))))
          msg <- c(msg,
                   paste("Length of some columns != ", nRow, " (dim()[[1]]): ",
                         paste(nR2[is.na(match(nR2, nRow))], collapse = ", ")))
    }
    if(length(msg)> 0)
      msg
    else
      TRUE
})

try(
dd = new("dataFrame1", list(a=1:10, b=rnorm(10), c=rnorm(9)), row.names = letters[1:10])
    )

back to top