cd@@ek m@iii@g oii posteo@de
2021-Apr-13 15:11 UTC
[R] graphics useRaster check_irregular definition for date or posix
Hi The function `check_irregular()` defined within `graphics::image.default()` checks if the `useRaster` argument for `graphics::image()` can be true or must be false. According to this function, the following example vector is irregular: ``` time <- seq(as.Date("2020-1-1"), as.Date("2020-12-31"), l=12) check_irregular(time, time) # TRUE ``` In my view, this is not correct. In this case, the `all.equal`-call does not evaluate to true due to the special class of `dx` (or `dy`). If I slightly rewrite the function as ``` my_check_irregular <- function (x, y) { dx <- as.numeric(diff(x)) dy <- as.numeric(diff(y)) (length(dx) && !isTRUE(all.equal(dx, rep(dx[1], length(dx))))) || (length(dy) && !isTRUE(all.equal(dy, rep(dy[1], length(dy))))) } ``` the correct answer is obtained (i.e. that the input vector is not irregular based on the rational behind `all.equal`): ``` my_check_irregular(time, time) # FALSE ``` The same applies to POSIX* objects. I was wondering if this is intended or not? Thanks a lot for any answer, Chris [[alternative HTML version deleted]]
Paul Murrell
2021-Apr-14 02:37 UTC
[R] graphics useRaster check_irregular definition for date or posix
Hi I doubt it is intended (to deliberately exclude "difftime" objects). Can you please supply a full image() example (with 'x' and/or 'y' as Dates and a 'z') ? So that I can see what ... image(x, y, z, useRaster=FALSE) ... looks like, so I can see what you want ... image(x, y, z, useRaster=TRUE) ... to look like. I also wonder whether switching to ... dx[1][rep(1, length(dx))] ... might be better than switching to ... as.numeric(dx) It produces the same result for "difftime" objects, and may have a better chance of working better with other objects (although I confess that not having thought of using a "difftime" for 'x' I am also failing to think of further possibilities for 'x'). Paul On 14/04/21 3:11 am, cdanek at posteo.de wrote:> Hi > > The function `check_irregular()` defined within > `graphics::image.default()` checks if the `useRaster` argument for > `graphics::image()` can be true or must be false. > > According to this function, the following example vector is irregular: > ``` > time <- seq(as.Date("2020-1-1"), as.Date("2020-12-31"), l=12) > check_irregular(time, time) > # TRUE > ``` > In my view, this is not correct. > > In this case, the `all.equal`-call does not evaluate to true due to the > special class of `dx` (or `dy`). If I slightly rewrite the function as > ``` > my_check_irregular <- function (x, y) > { > dx <- as.numeric(diff(x)) > dy <- as.numeric(diff(y)) > (length(dx) && !isTRUE(all.equal(dx, rep(dx[1], length(dx))))) || > (length(dy) && !isTRUE(all.equal(dy, rep(dy[1], length(dy))))) > } > ``` > the correct answer is obtained (i.e. that the input vector is not > irregular based on the rational behind `all.equal`): > ``` > my_check_irregular(time, time) > # FALSE > ``` > > The same applies to POSIX* objects. I was wondering if this is intended > or not? > > Thanks a lot for any answer, > Chris > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > <https://stat.ethz.ch/mailman/listinfo/r-help> > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > <http://www.R-project.org/posting-guide.html> > and provide commented, minimal, self-contained, reproducible code.-- Dr Paul Murrell Department of Statistics The University of Auckland Private Bag 92019 Auckland New Zealand 64 9 3737599 x85392 paul at stat.auckland.ac.nz http://www.stat.auckland.ac.nz/~paul/