[R-gregmisc-users] SF.net SVN: r-gregmisc: [992] trunk/gdata
Brought to you by:
warnes
|
From: <gg...@us...> - 2006-10-29 16:08:52
|
Revision: 992
http://svn.sourceforge.net/r-gregmisc/?rev=992&view=rev
Author: ggorjan
Date: 2006-10-29 08:08:40 -0800 (Sun, 29 Oct 2006)
Log Message:
-----------
fixed problem in tests; added unknown methods and tests for matrices
Modified Paths:
--------------
trunk/gdata/NEWS
trunk/gdata/R/unknown.R
trunk/gdata/inst/unitTests/runit.unknown.R
trunk/gdata/man/unknown.Rd
Modified: trunk/gdata/NEWS
===================================================================
--- trunk/gdata/NEWS 2006-10-29 15:47:33 UTC (rev 991)
+++ trunk/gdata/NEWS 2006-10-29 16:08:40 UTC (rev 992)
@@ -10,6 +10,8 @@
- trim() gains ... argument.
+- Added "unknown" methods for matrices.
+
CHANGES FROM 2.1.X to 2.3.0 (2006-09-19)
---------------------------------------
Modified: trunk/gdata/R/unknown.R
===================================================================
--- trunk/gdata/R/unknown.R 2006-10-29 15:47:33 UTC (rev 991)
+++ trunk/gdata/R/unknown.R 2006-10-29 16:08:40 UTC (rev 992)
@@ -2,14 +2,15 @@
###------------------------------------------------------------------------
### What: Change given unknown value to NA and vice versa
### $Id$
-### Time-stamp: <2006-09-10 03:52:39 ggorjan>
+### Time-stamp: <2006-10-29 17:08:21 ggorjan>
###------------------------------------------------------------------------
### {{{ isUnknown
+
###------------------------------------------------------------------------
isUnknown <- function(x, unknown=NA, ...)
- UseMethod("isUnknown")
+ UseMethod("isUnknown", x=x)
isUnknown.default <- function(x, unknown=NA, ...)
{
@@ -21,10 +22,12 @@
isUnknown.POSIXlt <- function(x, unknown=NA, ...)
{
+ ## FIXME: codetools say
+ ## isUnknown.POSIXlt: wrong number of arguments to as.character
if(is.list(unknown) && !inherits(x=unknown, what="POSIXlt")) {
unknown <- lapply(unknown, FUN=as.character, ...)
} else {
- unknown <- as.character(unknown, ...)
+ unknown <- as.character(x=unknown, ...)
}
isUnknown.default(x=as.character(x), unknown=unknown)
}
@@ -32,9 +35,9 @@
isUnknown.list <- function(x, unknown=NA, ...) {
unknown <- gdata:::.unknownList(x=x, unknown=unknown)
## FIXME - do I still need attributes here; R 2.4
- attrX <- attributes(x)
+ ## attrX <- attributes(x)
x <- mapply(FUN="isUnknown", x=x, unknown=unknown, ..., SIMPLIFY=FALSE)
- attributes(x) <- attrX
+ ## attributes(x) <- attrX
x
}
@@ -44,14 +47,19 @@
x
}
+isUnknown.matrix <- function(x, unknown=NA, ...)
+ apply(X=x, MARGIN=ifelse(ncol(x) > nrow(x), 1, 2), FUN=isUnknown,
+ unknown=unknown)
+
### }}}
### {{{ unknownToNA
+
###------------------------------------------------------------------------
-unknownToNA <- function(x, unknown, warning=FALSE)
+unknownToNA <- function(x, unknown, warning=FALSE, ...)
UseMethod("unknownToNA")
-unknownToNA.default <- function(x, unknown, warning=FALSE)
+unknownToNA.default <- function(x, unknown, warning=FALSE, ...)
{
if(warning) {
if(any(is.na(x)))
@@ -61,7 +69,7 @@
x
}
-unknownToNA.factor <- function(x, unknown, warning=FALSE)
+unknownToNA.factor <- function(x, unknown, warning=FALSE, ...)
{
## could put this func into default method, but I need unlisted unknown
## for levels handling
@@ -76,18 +84,18 @@
factor(x, levels=levs)
}
-unknownToNA.list <- function(x, unknown, warning=FALSE)
+unknownToNA.list <- function(x, unknown, warning=FALSE, ...)
{
unknown <- gdata:::.unknownList(x=x, unknown=unknown)
## FIXME - do I still need attributes here; R 2.4
- attrX <- attributes(x)
+ ## attrX <- attributes(x)
x <- mapply(FUN="unknownToNA", x=x, unknown=unknown, warning=warning,
SIMPLIFY=FALSE)
- attributes(x) <- attrX
+ ## attributes(x) <- attrX
return(x)
}
-unknownToNA.data.frame <- function(x, unknown, warning=FALSE)
+unknownToNA.data.frame <- function(x, unknown, warning=FALSE, ...)
{
x[] <- unknownToNA.list(x=x, unknown=unknown, warning=warning)
x
@@ -95,12 +103,13 @@
### }}}
### {{{ NAToUnknown
+
###------------------------------------------------------------------------
-NAToUnknown <- function(x, unknown, force=FALSE, call.=FALSE)
+NAToUnknown <- function(x, unknown, force=FALSE, call.=FALSE, ...)
UseMethod("NAToUnknown")
-NAToUnknown.default <- function(x, unknown, force=FALSE, call.=FALSE)
+NAToUnknown.default <- function(x, unknown, force=FALSE, call.=FALSE, ...)
{
if(length(as.character(unknown)) != 1) # as.character allows also POSIXlt
stop("'unknown' must be a single value")
@@ -120,7 +129,7 @@
x
}
-NAToUnknown.factor <- function(x, unknown, force=FALSE, call.=FALSE)
+NAToUnknown.factor <- function(x, unknown, force=FALSE, call.=FALSE, ...)
{
if(length(unknown) != 1)
stop("'unknown' must be a single value")
@@ -136,18 +145,18 @@
x
}
-NAToUnknown.list <- function(x, unknown, force=FALSE, call.=FALSE)
+NAToUnknown.list <- function(x, unknown, force=FALSE, call.=FALSE, ...)
{
unknown <- gdata:::.unknownList(x=x, unknown=unknown)
## FIXME - do I still need attributes here; R 2.4
- attrX <- attributes(x)
+ ## attrX <- attributes(x)
x <- mapply(FUN="NAToUnknown", x=x, unknown=unknown, force=force,
call.=call., SIMPLIFY=FALSE)
- attributes(x) <- attrX
+ ## attributes(x) <- attrX
x
}
-NAToUnknown.data.frame <- function(x, unknown, force=FALSE, call.=FALSE)
+NAToUnknown.data.frame <- function(x, unknown, force=FALSE, call.=FALSE, ...)
{
x[] <- NAToUnknown.list(x=x, unknown=unknown, force=force, call.=call.)
x
Modified: trunk/gdata/inst/unitTests/runit.unknown.R
===================================================================
--- trunk/gdata/inst/unitTests/runit.unknown.R 2006-10-29 15:47:33 UTC (rev 991)
+++ trunk/gdata/inst/unitTests/runit.unknown.R 2006-10-29 16:08:40 UTC (rev 992)
@@ -2,7 +2,7 @@
###------------------------------------------------------------------------
### What: Tests for Change given unknown value to NA and vice versa methods
### $Id$
-### Time-stamp: <2006-09-07 15:33:50 ggorjan>
+### Time-stamp: <2006-10-29 17:06:04 ggorjan>
###------------------------------------------------------------------------
### {{{ --- Test setup ---
@@ -125,7 +125,7 @@
xDFUnk1 <- as.data.frame(xListNUnk1)
xDFUnk1$cha <- as.character(xDFUnk1$cha)
xDFUnk1Test <- as.data.frame(xListUnk1Test)
-colnames(xDFUnk1Test) <- names(xListNUnk1)
+names(xDFUnk1Test) <- names(xListNUnk1)
unkC2 <- c(0, "notAvail")
xListUnk2 <- list(as.integer(c(unkC2[1], 1, 2, unkC2[1], 5, 6, 7, 8, 9)),
@@ -165,6 +165,20 @@
factor(c("A", NA, NA, "NA", "NA", 9999, NA, "-", NA)))
### }}}
+### {{{ --- Matrix ---
+
+matUnk <- 9999
+mat <- matrix(1:25, nrow=5, ncol=5)
+mat[1, 2] <- NA; mat[1, 4] <- NA; mat[2, 2] <- NA;
+mat[3, 2] <- NA; mat[3, 5] <- NA; mat[5, 4] <- NA;
+matUnk1 <- mat
+matUnk1[1, 2] <- matUnk; matUnk1[1, 4] <- matUnk; matUnk1[2, 2] <- matUnk;
+matUnk1[3, 2] <- matUnk; matUnk1[3, 5] <- matUnk; matUnk1[5, 4] <- matUnk;
+matUnkTest <- matUnk1Test <- is.na(mat)
+
+matUnk2Test <- matUnkTest | mat == 1
+
+### }}}
### {{{ --- Use of unknown=list(.default=, ...) or similarly named vector ---
D1 <- "notAvail"
@@ -280,6 +294,11 @@
## list(.default=, 99) ERROR as we do not know where to apply 99
checkException(isUnknown(x=xListNUnk, unknown=unkLND2E))
+ ## --- matrix ---
+
+ checkIdentical(isUnknown(x=mat, unknown=NA), matUnkTest)
+ checkIdentical(isUnknown(x=matUnk1, unknown=matUnk), matUnkTest)
+ checkIdentical(isUnknown(x=matUnk1, unknown=c(1, matUnk)), matUnk2Test)
}
### }}}
@@ -310,8 +329,7 @@
## Date-time classes
checkIdentical(unknownToNA(xDateUnk, unknown=dateUnk), xDate)
- ## FIXME uncomment in R 2.4
- ## checkIdentical(unknownToNA(xPOSIXltUnk, unknown=POSIXltUnk), xPOSIXlt)
+ checkIdentical(unknownToNA(xPOSIXltUnk, unknown=POSIXltUnk), xPOSIXlt)
checkIdentical(unknownToNA(xPOSIXctUnk, unknown=POSIXctUnk), xPOSIXct)
## --- lists and data.frames ---
@@ -368,6 +386,10 @@
checkIdentical(unknownToNA(x=xListNUnkD3, unknown=unkLND3), xListN)
## list(.default=, 99) ERROR as we do not know where to apply 99
checkException(unknownToNA(x=xListNUnk, unknown=unkLND2E))
+
+ ## --- matrix ---
+
+ checkEquals(unknownToNA(x=matUnk1, unknown=matUnk), mat)
}
### }}}
@@ -405,7 +427,7 @@
## Date-time classes
checkIdentical(NAToUnknown(xDate, unknown=dateUnk), xDateUnk)
- ## FIXME uncomment in R 2.4
+ ## FIXME
## checkIdentical(NAToUnknown(xPOSIXlt, unknown=POSIXltUnk), xPOSIXltUnk)
checkIdentical(NAToUnknown(xPOSIXct, unknown=POSIXctUnk), xPOSIXctUnk)
@@ -464,6 +486,9 @@
## list(.default=, 99) ERROR as we do not know where to apply 99
checkException(NAToUnknown(x=xListN, unknown=unkLND2E))
+ ## --- matrix ---
+
+ checkEquals(NAToUnknown(x=mat, unknown=matUnk), matUnk1)
}
### }}}
Modified: trunk/gdata/man/unknown.Rd
===================================================================
--- trunk/gdata/man/unknown.Rd 2006-10-29 15:47:33 UTC (rev 991)
+++ trunk/gdata/man/unknown.Rd 2006-10-29 16:08:40 UTC (rev 992)
@@ -2,7 +2,7 @@
%--------------------------------------------------------------------------
% What: Change given unknown value to NA and vice versa man page
% $Id$
-% Time-stamp: <2006-09-07 15:38:12 ggorjan>
+% Time-stamp: <2006-10-15 03:52:48 ggorjan>
%--------------------------------------------------------------------------
\name{unknownToNA}
@@ -12,6 +12,7 @@
\alias{isUnknown.POSIXlt}
\alias{isUnknown.list}
\alias{isUnknown.data.frame}
+\alias{isUnknown.matrix}
\alias{unknownToNA}
\alias{unknownToNA.default}
@@ -39,8 +40,8 @@
\usage{
isUnknown(x, unknown=NA, \ldots)
-unknownToNA(x, unknown, warning=FALSE)
-NAToUnknown(x, unknown, force=FALSE, call.=FALSE)
+unknownToNA(x, unknown, warning=FALSE, \ldots)
+NAToUnknown(x, unknown, force=FALSE, call.=FALSE, \ldots)
}
@@ -49,7 +50,8 @@
\item{unknown}{generic, value used instead of \code{NA}}
\item{warning}{logical, issue warning if \code{x} already has \code{NA}}
\item{force}{logical, force to apply already existing value in \code{x}}
- \item{\ldots}{arguments pased to as.character POSIXlt method}
+ \item{\ldots}{arguments pased to other methods (as.character for POSIXlt
+ in case of isUnknown)}
\item{call.}{logical, look in \code{\link{warning}}}
}
@@ -65,8 +67,8 @@
All functions are generic and the following classes were tested to work
with latest version: \dQuote{integer}, \dQuote{numeric},
\dQuote{character}, \dQuote{factor}, \dQuote{Date}, \dQuote{POSIXct},
-\dQuote{POSIXlt}, \dQuote{list}, \dQuote{data.frame}. For others default
-method might work just fine.
+\dQuote{POSIXlt}, \dQuote{list}, \dQuote{data.frame} and
+\dQuote{matrix}. For others default method might work just fine.
\code{unknownToNA} and \code{isUnknown} can cope with multiple values in
\code{unknown}, but those should be given as a \dQuote{vector}. If not,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|