[R] printing difftime summary

R. Michael Weylandt michael.weylandt at gmail.com
Mon Nov 26 22:18:48 CET 2012


On Mon, Nov 26, 2012 at 4:46 PM, David Winsemius <dwinsemius at comcast.net> wrote:
>
> 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")

Surely reversed no? summary.difftime inherits from data.frame I would
have assumed.

>>  r
>> }
>> print.summary.difftime <- function (sd) print.data.frame(sd)

What is this supposed to do exactly? If you have inheritance why have
the subclass method do nothing other than call the parent method?

Michael

>> --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
>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.




More information about the R-help mailing list