Hi, I was "losing" my dates in a script and upon inspection, found that my recent switch from separate "if" and "else" to "ifelse" was the cause. But why? my.date = as.POSIXct("2011-06-04 08:00:00") default.date = seq(as.POSIXct("2011-01-01 08:00:00"), as.POSIXct("2011-09-01 08:00:00"), length=15) x = 4 * 60 * 60 (my.date + x) (min(default.date) + x) (new.date = ifelse(!is.na(my.date), my.date + x, min(default.date) + x) ) (if(!is.na(my.date)) new.date2 = my.date + x else new.date2= min(default.date) + x ) On my machine, new.date is "numeric" whereas new.date2 is "POSIXct" and "POSIXt", as desired. sessionInfo() R version 2.13.0 (2011-04-13) Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit) locale: [1] fr_CA.UTF-8/fr_CA.UTF-8/C/C/fr_CA.UTF-8/fr_CA.UTF-8 attached base packages: [1] stats graphics grDevices utils datasets methods base Thanks in advance, Denis
On 11-06-05 8:23 AM, Denis Chabot wrote:> Hi, > > I was "losing" my dates in a script and upon inspection, found that my recent switch from separate "if" and "else" to "ifelse" was the cause. But why?See ?ifelse. The class of the result is the same as the class of the test, not the classes of the alternatives. You need to manually attach the class again, or use a different construction. Duncan Murdoch> > my.date = as.POSIXct("2011-06-04 08:00:00") > default.date = seq(as.POSIXct("2011-01-01 08:00:00"), as.POSIXct("2011-09-01 08:00:00"), length=15) > x = 4 * 60 * 60 > (my.date + x) > (min(default.date) + x) > (new.date = ifelse(!is.na(my.date), my.date + x, min(default.date) + x) ) > > (if(!is.na(my.date)) new.date2 = my.date + x else new.date2= min(default.date) + x ) > > On my machine, new.date is "numeric" whereas new.date2 is "POSIXct" and "POSIXt", as desired. > > sessionInfo() > R version 2.13.0 (2011-04-13) > Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit) > > locale: > [1] fr_CA.UTF-8/fr_CA.UTF-8/C/C/fr_CA.UTF-8/fr_CA.UTF-8 > > attached base packages: > [1] stats graphics grDevices utils datasets methods base > > > Thanks in advance, > > Denis > ______________________________________________ > 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.
On Sun, Jun 5, 2011 at 8:23 AM, Denis Chabot <chabot.denis at gmail.com> wrote:> Hi, > > I was "losing" my dates in a script and upon inspection, found that my recent switch from separate "if" and "else" to "ifelse" was the cause. But why? > > my.date = as.POSIXct("2011-06-04 08:00:00") > default.date = seq(as.POSIXct("2011-01-01 08:00:00"), as.POSIXct("2011-09-01 08:00:00"), length=15) > x = 4 * 60 * 60 > (my.date + x) > (min(default.date) + x) > (new.date = ifelse(!is.na(my.date), my.date + x, min(default.date) + x) ) >Try replace: new.date <- replace(my.date, is.na(my.date), min(default.date)) + x -- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com
I did not know this function, thanks a lot Gabor. Denis Le 2011-06-05 ? 08:48, Gabor Grothendieck a ?crit :> On Sun, Jun 5, 2011 at 8:23 AM, Denis Chabot <chabot.denis at gmail.com> wrote: >> Hi, >> >> I was "losing" my dates in a script and upon inspection, found that my recent switch from separate "if" and "else" to "ifelse" was the cause. But why? >> >> my.date = as.POSIXct("2011-06-04 08:00:00") >> default.date = seq(as.POSIXct("2011-01-01 08:00:00"), as.POSIXct("2011-09-01 08:00:00"), length=15) >> x = 4 * 60 * 60 >> (my.date + x) >> (min(default.date) + x) >> (new.date = ifelse(!is.na(my.date), my.date + x, min(default.date) + x) ) >> > > Try replace: > > new.date <- replace(my.date, is.na(my.date), min(default.date)) + x > > > -- > Statistics & Software Consulting > GKX Group, GKX Associates Inc. > tel: 1-877-GKX-GROUP > email: ggrothendieck at gmail.com