Thanks for the help. ifelse does the job.
Could you elaborate, or give an example of the "awkward" things ifelse might
do to classed objects?

On Wed, Oct 15, 2008 at 1:38 PM, Peter Dalgaard <[EMAIL PROTECTED]>wrote:

> Joe Kaser wrote:
>
>> 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...
>>
>
> OK: help(ifelse), ordinary if doesn't vectorize.
>
> Actually, ifelse does awkward things with classed objects. You might want
> something like
>
> sub <- x - y
> sub[sub<0] <- x+y
>
> instead. And don't forget to return sub in all cases.
>
> --
>   O__  ---- Peter Dalgaard             Ă˜ster Farimagsgade 5, Entr.B
>  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
>  (*) \(*) -- University of Copenhagen   Denmark      Ph:  (+45) 35327918
> ~~~~~~~~~~ - ([EMAIL PROTECTED])              FAX: (+45) 35327907
>

        [[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