printing difftime summary
On Nov 26, 2012, at 7:14 AM, Sam Steingold wrote:
this overcomes the summary generation, but not printing:
--8<---------------cut here---------------start------------->8---
summary.difftime <- function (v, ...) {
s <- summary(as.numeric(v), ...)
r <- as.data.frame(sapply(s,difftime2string),stringsAsFactors=FALSE)
names(r) <- c("string")
r[[units(v)]] <- s
class(r) <- c("data.frame","summary.difftime")
r
}
print.summary.difftime <- function (sd) print.data.frame(sd)
--8<---------------cut here---------------end--------------->8---
summary(infl), where infl$delay is a difftime vector, prints
...
delay
string:c("492.00 ms", "18.08 min", "1.77 hrs", "8.20 hrs", "8.13
hrs", "6.98 days")
secs :c(" 0.5", " 1085.1", " 6370.2", " 29534.4", " 29254.0",
"602949.7")
instead of something like
delay
Min.: 492 ms
1st Qu.: 18.08 min
&c
so, how do I arrange for a proper printing of difftime summary as a
part
of the data frame summary?
If you like a particular format from an existing print method then why not look it up and copy the code? methods(print)
David. > >> * David Winsemius <qjvafrzvhf at pbzpnfg.arg> [2012-11-25 00:50:51 >> -0800]: >> >> On Nov 24, 2012, at 7:48 PM, Sam Steingold wrote: >> >>>> * David Winsemius <qjvafrzvhf at pbzpnfg.arg> [2012-11-23 13:14:17 >>>> -0800]: >>>> >>>>>> See http://cran.r-project.org/doc/FAQ/R-FAQ.html#How-should-I-write-summary-methods_003f >>> >>> --8<---------------cut here---------------start------------->8--- >>> summary.difftime <- function (v) { >>> s <- summary(as.numeric(v)) >>> r <- as.data.frame(sapply(s,difftime2string),stringsAsFactors=FALSE) >>> names(r) <- c("string") >>> r[[units(v)]] <- s >>> class(r) <- c("data.frame","summary.difftime") >>> r >>> } >>> print.summary.difftime <- function (sd) print.data.frame(sd) >>> --8<---------------cut here---------------end--------------->8--- >>> >>> it appears to work for a single vector: >>> >>> --8<---------------cut here---------------start------------->8--- >>>> r1 <- summary(infl$delay) >>>> r1 >>> string secs >>> Min. 492.00 ms 0.5 >>> 1st Qu. 18.08 min 1085.0 >>> Median 1.77 hrs 6370.0 >>> Mean 8.20 hrs 29530.0 >>> 3rd Qu. 8.12 hrs 29250.0 >>> Max. 6.98 days 602900.0 >>>> str(r1) >>> Classes 'summary.difftime' and 'data.frame': 6 obs. of 2 variables: >>> $ string: chr "492.00 ms" "18.08 min" "1.77 hrs" "8.20 hrs" ... >>> $ secs :Classes 'summaryDefault', 'table' num [1:6] 4.92e-01 >>> 1.08e+03 6.37e+03 2.95e+04 2.92e+04 ... >>> --8<---------------cut here---------------end--------------->8--- >>> >>> but not as a part of data frame: >>> >>> --8<---------------cut here---------------start------------->8--- >>>> a <- summary(infl) >>> Error in summary.difftime(X[[22L]], ...) : >>> unused argument(s) (maxsum = 7, digits = 12) >>> --8<---------------cut here---------------end--------------->8--- >>> >>> I guess I should somehow accept a list of options in >>> summary.difftime() >>> and pass them on to the inner call to summary() (or should it be >>> explicitly summary.numeric()?) >>> >> >> In the usual way. If you know that the function will be called with >> arguments from the summary.data.frame function then you should >> allow the >> argument list to accept them. You can ignore them or provide >> provisions >> for them. You just can't define your function to have only one >> argument >> if you expect (as you should since you passes summary a dataframe >> object) that it might be called within summary.data.frame. >> >> This is the argument list for summary.data.frame: >> >>> summary.data.frame >> function (object, maxsum = 7, digits = max(3, getOption("digits") - >> 3), ...) >> >>> how do I do that? >> >> summary.difftime <- function (v, ... ) { ................ >> >> There are many asked and answered questions on rhelp about how to >> deal >> with the "dots" arguments. > > -- > Sam Steingold (http://sds.podval.org/) on Ubuntu 12.04 (precise) X > 11.0.11103000 > http://www.childpsy.net/ http://www.memritv.org http://memri.org > http://honestreporting.com http://dhimmi.com http://openvotingconsortium.org > People with a good taste are especially appreciated by cannibals. David Winsemius, MD Alameda, CA, USA