Ah! Thanks.
 ifelse() appears to do the job.
note: subtracting 12 from chron rather than noon doesn't seem to work.  I
think (but am not totally sure) chron interprets 12 as fraction of a day -
i.e. 12/1 days...


On Wed, Oct 15, 2008 at 1:33 PM, Greg Snow <[EMAIL PROTECTED]> wrote:

> The if statement is for program flow control (do this bunch of code if this
> condition is true, else do this), the vectorized version is the ifelse
> function, that is the one that you want to use.
>
> Also note (this is for times in general, not sure about chron specifically)
> subtracting noon from the times gives you time differences, subtracting a
> time difference from a time will give you another time, so it may be simpler
> to subtract just 12, rather than noon from your times.
>
> --
> Gregory (Greg) L. Snow Ph.D.
> Statistical Data Center
> Intermountain Healthcare
> [EMAIL PROTECTED]
> 801.408.8111
>
>
> > -----Original Message-----
> > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> > project.org] On Behalf Of Joe Kaser
> > Sent: Wednesday, October 15, 2008 2:19 PM
> > To: r-help@r-project.org
> > Subject: [R] Condition warning: has length > 1 and only the first
> > element will be used
> >
> > Hello,
> >
> > I've been learning R functions recently and I've come across a problem
> > that
> > perhaps someone could help me with.
> >
> > # I have a a chron() object of times
> >
> > > hours=chron(time=c("01:00:00","18:00:00","13:00:00","10:00:00"))
> >
> > # I would like to subtract 12 hours from each time element, so I
> > created a
> > vector of 12 hours (actually, more like a vector of noons)
> >
> > > less.hours=chron(time=rep("12:00:00",4))
> >
> > # If I just subtract the two vectors, I get some negative values, as
> > fractions of a day
> >
> > > hours-less.hours
> > [1] -0.45833333  0.25000000  0.04166667 -0.08333333
> >
> > # I would like those negative values to cycle around and subtract the
> > amount
> > < 0 from midnight
> > # That is to say, 01:00:00 - 12:00:00 should be 13:00:00
> > # because 01:00:00-12:00:00 = -11:00:00, and 24:00:00-11:00:00 =
> > 13:00:00
> > # It's sort of like going back to the previous day, but without
> > actually
> > including information about which day it is
> >
> > # This is what I tried
> >
> > > test.function=function(x,y) {
> > + sub = x-y
> > + if(sub<0) x+y
> > + }
> >
> > > test.function(hours,less.hours)
> > Time in days:
> > [1] 0.5416667 1.2500000 1.0416667 0.9166667
> > Warning message:
> > In if (sub < 0) x + y :
> >   the condition has length > 1 and only the first element will be used
> >
> >
> > # My questions are, why does it only use the first element?? Why does
> > it not
> > apply to all? Also, what happened to the elements where sub>= 0, it
> > looks
> > like they followed the rules
> > # of if(sub<0).  I feel like I must not be understanding something
> > rather
> > basic about how logical expressions operate within R
> > # Help would be appreciated...
> >
> >         [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help@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.
>

        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

Reply via email to