[R] No "number of days" format for 'difftime'?

Loris Bennett loris.bennett at fu-berlin.de
Mon Aug 8 16:43:10 CEST 2016


Martin Maechler <maechler at stat.math.ethz.ch> writes:

>>>>>> Loris Bennett <loris.bennett at fu-berlin.de>
>>>>>>     on Mon, 8 Aug 2016 14:12:47 +0200 writes:
>
>     > Loris Bennett <loris.bennett at fu-berlin.de> writes:
>     >> Thanks for the link, John.  However, there is a hyphen missing.  It
>     >> should be:
>     >> 
>     >> http://www.dummies.com/how-to/content/how-to-read-errors-and-warnings-in-r.html
>     >> 
>     >> Appropriately, with the correct URL we find the too often forgotten
>     >> pearl of wisdom:
>     >> 
>     >> "Chances are, you just typed something wrong there."
>     >> 
>     >> I think I need this on my coffee cup.
>     >> 
>     >> Cheers,
>     >> 
>     >> Loris
>
>     > Continuing the topic for my future self and others equally poorly versed
>     > in The Art and Dark Science of Interpreting R Error Messages, if I have
>     > the following in the file "my_data"
>
>     > 1094165      2016-07-24T09:40:02 13-23:03:28          1  COMPLETED 
>     > 1112076      2016-08-01T14:45:49 6-13:26:15          1  COMPLETED 
>
>     > and do
>
>     >> d <- read.table("my_data")
>     >> colnames(d) <- c("jobid","start","elapsed","alloccpus","state")
>     >> df <- transform(d,start = as.POSIXct(start,format="%Y-%m-%dT%H:%M:%S"),elapsed = as.difftime(elapsed,format="%d-%H:%M:%S"))
>
>     > I get the following:
>
>     > Error in as.difftime(elapsed, format = "%d-%H:%M:%S") : 
>     > 'tim' is not character or numeric
>
> Well, let me argue that you should have found this to be a *helpful*
> error message. You are no complete beginner anymore, right,
> so
>
> 1) the error is in your use of  as.difftime().
>
> 2) ?as.difftime  or  str(difftime)
>    both clearly indicate that  'tim' is the first argument of as.difftime,
>
> and I really do wonder why you continued with the infamous
> "trial-and-error programming technique" instead of reading or at
> least quickly browsing the relevant reference, i.e., help page
>
> Martin

My apologies, you are absolutely right - I see the error of my ways.
The only feeble defence I can mount is that the usage example from
?as.difftime

  as.difftime(tim, format = "%X", units = "auto")

superficially disguises the fact that the first argument is also a named
argument with the name 'tim'.  I think I had assumed that the initial
argument were always positional, e.g. as for paste0

  paste0(..., collapse = NULL)

However, I now realise that '...' also generates named arguments, e.g.

  paste0(..1='a',..2='b')

So as a non-beginner but infrequent R user, in future I shall try use
the explicit form more often, e.g.

  as.difftime(tim = "4-03:02:01", format = "%d-%H:%M:%S")

to remind myself what I am doing.

So fortune(350) really is true.  I just didn't believe enough to read
enough. 

Loris
-- 
Dr. Loris Bennett (Mr.)
ZEDAT, Freie Universität Berlin         Email loris.bennett at fu-berlin.de



More information about the R-help mailing list