Hello everybody, it looks like the presense of some (do know know which) S4 methods for a given S4 class degrades the performance of xtfrm (used in 'order' in new R-devel) by a factor of millions. This is for classes that ARE derived from numeric directly and thus should be quite trivial to convert to numeric.
Consider the following example: setClass("TimeDateBase", representation("numeric", mode="character"), prototype(mode="posix") ) setClass("TimeDate", representation("TimeDateBase", tzone="character"), prototype(tzone="London") ) x = new("TimeDate", 1220966224 + runif(1e5)) system.time({ z = order(x) }) ## > system.time({ z = order(x) }) ## user system elapsed ## 0.048 0.000 0.048 getClass("TimeDate") ## Class "TimeDate" ## Slots: ## Name: .Data tzone mode ## Class: numeric character character ## Extends: ## Class "TimeDateBase", directly ## Class "numeric", by class "TimeDateBase", distance 2 ## Class "vector", by class "TimeDateBase", distance 3 Now, if I load a library that not only defines these same classes, but also a bunch of methods for those, then I have the following result: library(AHLCalendar) x = now() + runif(1e5) ## just random times in POSIXct format x[1:5] ## TimeDate [posix] object in 'Europe/London' of length 5: ## [1] "2008-09-09 14:19:35.218" "2008-09-09 14:19:35.672" ## [3] "2008-09-09 14:19:35.515" "2008-09-09 14:19:35.721" ## [5] "2008-09-09 14:19:35.657" > system.time({ z = order(x) }) Enter a frame number, or 0 to exit 1: system.time({ 2: order(x) 3: lapply(z, function(x) if (is.object(x)) xtfrm(x) else x) 4: FUN(X[[1]], ...) 5: xtfrm(x) 6: xtfrm.default(x) 7: as.vector(rank(x, ties.method = "min", na.last = "keep")) 8: rank(x, ties.method = "min", na.last = "keep") 9: switch(ties.method, average = , min = , max = .Internal(rank(x[!nas], ties. 10: .gt(c(1220966375.21811, 1220966375.67217, 1220966375.51470, 1220966375.7211 11: x[j] 12: x[j] Selection: 0 Timing stopped at: 47.618 13.791 66.478 At the same time: system.time({ z = as.numeric(x) }) ## same as [EMAIL PROTECTED] ## user system elapsed ## 0.001 0.000 0.001 The only difference between the two is that I have the following methods defined for TimeDate (full listing below). Any idea why this could be happenning. And yes, it is down to xtfrm function, 'order' was just a place where the problem occured. Should xtfrm function be smarter with respect to classes that are actually derived from 'numeric'? > showMethods(class="TimeDate") Function: + (package base) e1="TimeDate", e2="TimeDate" e1="TimeDate", e2="numeric" (inherited from: e1="TimeDateBase", e2="numeric") Function: - (package base) e1="TimeDate", e2="TimeDate" Function: Time (package AHLCalendar) x="TimeDate" Function: TimeDate (package AHLCalendar) x="TimeDate" Function: TimeDate<- (package AHLCalendar) x="TimeSeries", value="TimeDate" Function: TimeSeries (package AHLCalendar) x="data.frame", ts="TimeDate" x="matrix", ts="TimeDate" x="numeric", ts="TimeDate" Function: [ (package base) x="TimeDate", i="POSIXt", j="missing" x="TimeDate", i="Time", j="missing" x="TimeDate", i="TimeDate", j="missing" x="TimeDate", i="integer", j="missing" (inherited from: x="TimeDateBase", i="ANY", j="missing") x="TimeDate", i="logical", j="missing" (inherited from: x="TimeDateBase", i="ANY", j="missing") x="TimeSeries", i="TimeDate", j="missing" x="TimeSeries", i="TimeDate", j="vector" Function: [<- (package base) x="TimeDate", i="ANY", j="ANY", value="ANY" x="TimeDate", i="ANY", j="ANY", value="numeric" x="TimeDate", i="missing", j="ANY", value="ANY" x="TimeDate", i="missing", j="ANY", value="numeric" Function: add (package AHLCalendar) x="TimeDate" Function: addMonths (package AHLCalendar) x="TimeDate" Function: addYears (package AHLCalendar) x="TimeDate" Function: align (package AHLCalendar) x="TimeDate", to="character" x="TimeDate", to="missing" Function: as.POSIXct (package base) x="TimeDate" Function: as.POSIXlt (package base) x="TimeDate" Function: coerce (package methods) from="TimeDate", to="TimeDateBase" Function: coerce<- (package methods) from="TimeDate", to="numeric" Function: dates (package AHLCalendar) x="TimeDate" Function: format (package base) x="TimeDate" Function: fxFwdDate (package AHLCalendar) x="TimeDate", country="character" Function: fxSettleDate (package AHLCalendar) x="TimeDate", country="character" Function: holidays (package AHLCalendar) x="TimeDate" Function: index (package AHLCalendar) x="TimeDate", y="POSIXt" x="TimeDate", y="Time" x="TimeDate", y="TimeDate" Function: initialize (package methods) .Object="TimeDate" (inherited from: .Object="ANY") Function: leapYear (package AHLCalendar) x="TimeDate" Function: mday (package AHLCalendar) x="TimeDate" Function: mode (package base) x="TimeDate" (inherited from: x="TimeDateBase") Function: mode<- (package base) x="TimeDate", value="character" (inherited from: x="TimeDateBase", value="character") Function: month (package AHLCalendar) x="TimeDate" Function: pretty (package base) x="TimeDate" Function: prettyFormat (package AHLCalendar) x="TimeDate", munit="character" x="TimeDate", munit="missing" Function: print (package base) x="TimeDate" Function: show (package methods) object="TimeDate" (inherited from: object="TimeDateBase") Function: summary (package base) object="TimeDate" Function: td2tz (package AHLCalendar) x="TimeDate" Function: times (package AHLCalendar) x="TimeDate" Function: tojulian (package AHLCalendar) x="TimeDate" Function: toposix (package AHLCalendar) x="TimeDate" Function: tots (package AHLCalendar) x="TimeDate" Function: tzone (package AHLCalendar) x="TimeDate" Function: tzone<- (package AHLCalendar) x="TimeDate" Function: wday (package AHLCalendar) x="TimeDate" Function: yday (package AHLCalendar) x="TimeDate" Function: year (package AHLCalendar) x="TimeDate" Dr Oleg Sklyar Research Technologist AHL / Man Investments Ltd +44 (0)20 7144 3107 [EMAIL PROTECTED] ********************************************************************** The contents of this email are for the named addressee(s...{{dropped:22}} ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel