On 04/20/2011 11:38 AM, Prof Brian Ripley wrote:
Well, lots of functions are not generic. We do ask you to give a case
for such changes ... where is it?

The specific need started with base::lapply, which calls base::as.list. An S4 method "as.list,A-method" defined in a name space isn't seen by base::as.list, whereas as.list.A is (see discussion in ?Methods around /f3.myClass). The question is from this post on a Bioconductor mailing list

https://stat.ethz.ch/pipermail/bioc-sig-sequencing/2011-April/001979.html

[partly answering Bill's question here] A list() constructor could be tricky to implement (dealing with variable numbers of arguments and the S4 rules for dispatch on ...), whereas as.list.A is trivial (slot extraction, in my case). Having arrived at an easy solution, I marched through the other coercion functions with only minor set-backs (as.double.A instead of as.numeric.A) until factor.

Martin


On Wed, 20 Apr 2011, Martin Morgan wrote:

as.factor / as.ordered is not written as a generic. This differs from
as.numeric, as.matrix, and other as.*. The following seems to address
this and does not break make check-all.

FWIW, the patch is against r55563, because with r55564 I see

OS-specific ....

/home/mtmorgan/src/R-devel/src/main/dounzip.c:75:15: error: storage
size of ‘dt’ isn’t known
/home/mtmorgan/src/R-devel/src/main/dounzip.c:88:5: warning: implicit
declaration of function ‘mktime’
make[3]: *** [dounzip.o] Error 1
make[3]: *** Waiting for unfinished jobs....
make[3]: Leaving directory `/home/mtmorgan/bin/R-devel/src/main'
make[2]: *** [R] Error 2
make[2]: Leaving directory `/home/mtmorgan/bin/R-devel/src/main'
make[1]: *** [R] Error 1
make[1]: Leaving directory `/home/mtmorgan/bin/R-devel/src'
make: *** [R] Error 1


Index: src/library/base/R/factor.R
===================================================================
--- src/library/base/R/factor.R (revision 55563)
+++ src/library/base/R/factor.R (working copy)
@@ -45,7 +45,9 @@
}

is.factor <- function(x) inherits(x, "factor")
-as.factor <- function(x) if (is.factor(x)) x else factor(x)
+as.factor.default <- function(x, ...)
+ if (is.factor(x)) x else factor(x, ...)
+as.factor <- function(x, ...) UseMethod("as.factor")

## Help old S users:
category <- function(...) .Defunct()
@@ -245,7 +247,10 @@
ordered <- function(x, ...) factor(x, ..., ordered=TRUE)

is.ordered <- function(x) inherits(x, "ordered")
-as.ordered <- function(x) if(is.ordered(x)) x else ordered(x)
+as.ordered.default <- function(x, ...)
+ if(is.ordered(x)) x else ordered(x, ...)
+as.ordered <- function(x, ...)
+ UseMethod("as.ordered")

Ops.ordered <- function (e1, e2)
{
Index: src/library/base/man/factor.Rd
===================================================================
--- src/library/base/man/factor.Rd (revision 55563)
+++ src/library/base/man/factor.Rd (working copy)
@@ -10,7 +10,9 @@
\alias{is.factor}
\alias{is.ordered}
\alias{as.factor}
+\alias{as.factor.default}
\alias{as.ordered}
+\alias{as.ordered.default}
\alias{is.na<-.factor}
\alias{Math.factor}
\alias{Ops.factor}
@@ -40,8 +42,8 @@
is.factor(x)
is.ordered(x)

-as.factor(x)
-as.ordered(x)
+as.factor(x, \dots)
+as.ordered(x, \dots)

addNA(x, ifany=FALSE)
}

--
Computational Biology
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109

Location: M1-B861
Telephone: 206 667-2793

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel




--
Computational Biology
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109

Location: M1-B861
Telephone: 206 667-2793

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to