... correction: you need to use absolute value for the comparison, of course.
all(abs(diff(z) - z[2] + z[1]) < tol) -- Bert Bert Gunter Genentech Nonclinical Biostatistics (650) 467-7374 "Data is not information. Information is not knowledge. And knowledge is certainly not wisdom." Clifford Stoll On Mon, Apr 6, 2015 at 10:47 AM, Bert Gunter <bgun...@gene.com> wrote: > Perhaps ?diff might be useful here: > > z <- runif(20) > all(diff(z) == z[2] - z[1] ) > ## FALSE > > z <- seq_len(10) > all(diff(z) == z[2] - z[1] ) > ##TRUE > > You can use signif or round as before to allow for "near uniformity" > or use ?zapsmall or an explicit comparison with a tolerancec instead > of ==, e.g. all(diff(z) - z[2] + z[1] < tol) > > Cheers, > Bert > > Bert Gunter > Genentech Nonclinical Biostatistics > (650) 467-7374 > > "Data is not information. Information is not knowledge. And knowledge > is certainly not wisdom." > Clifford Stoll > > > > > On Mon, Apr 6, 2015 at 10:11 AM, Marc Lamblin <marcgg.lamb...@gmail.com> > wrote: >> The aim is to control if a given abscissa/grid is uniform or not. Abscissa >> in generic vector of real ordered numbers. >> >> Here a reproducibile code: >> >> # uniform abscissa/grid >> abscissa1 <- seq(0, 1, length=100) >> # non-uniform abscissa/grid >> abscissa2 <- sort(runif(100)) >> >> control1 <- all(signif(abscissa1[1:(length(abscissa1) - 1) + 1] - >> abscissa1[1:(length(abscissa1) - 1)]) == signif(rep((range(abscissa1)[2] - >> range(abscissa1)[1])/(length(abscissa1) - 1), length(abscissa1) - 1))) >> control2 <- all(signif(abscissa2[1:(length(abscissa2) - 1) + 1] - >> abscissa2[1:(length(abscissa2) - 1)]) == signif(rep((range(abscissa2)[2] - >> range(abscissa2)[1])/(length(abscissa2) - 1), length(abscissa2) - 1))) >> >> control1 >> control2 >> >> As expected control1 is TRUE and control2 is FALSE. Actually in this code >> it is possible also to use >> diff inside signif. >> Do you mean that the control to perform can be done in this manner >> >> if (length(unique(diff(vec))) == 1) { >> control <- TRUE >> } else { >> control <- FALSE >> } >> >> I have tried to apply this control on abscissa1 which is uniform but >> length(unique(diff(abscissa1))) was greater than one; probably, as you >> said, this is due to the fact that in this way I don't take into account >> the machine precision. >> What I want to understand is if there is a SAFE solution, even if until now >> this control is working correctly. I have seen in the documentation of >> signif that by default the number of digits considered are 6. The number of >> digits to consider depends on the scale used. It doesn't make sense to >> increase the number of digits with respect to default because, in this >> case, you are not using an handy scale. >> Maybe it could be better directly to ask user if the abscissa passed as >> argument is uniform or not. >> Thanks a lot for the link!!! >> >> Marc >> >> >> >> >> 2015-04-06 16:32 GMT+02:00 Sarah Goslee <sarah.gos...@gmail.com>: >> >>> Without a reproducible example that includes some sample data (fake is >>> fine), the code you used (NOT in HTML format), and some clear idea of >>> what output you expect, it's impossible to figure out how to help you. >>> Here are some suggestions for creating a good reproducible example: >>> >>> http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example >>> >>> Without knowing what you want, it looks like abscissa is a vector, and >>> so I'm not sure how this defines a grid, but >>> length(unique(diff(vec))) >>> might help. Note that this DOES NOT account for machine precision in any >>> way. >>> >>> Sarah >>> >>> On Mon, Apr 6, 2015 at 7:50 AM, Marc Lamblin <marcgg.lamb...@gmail.com> >>> wrote: >>> > I need to control of a given grid is uniform. This control using signif >>> > until now works: >>> > >>> > if (all(signif(abscissa[1:(length(abscissa) - 1) + 1] - >>> > abscissa[1:(length(abscissa) - 1)]) == signif(rep((range(abscissa)[2] - >>> > range(abscissa)[1])/(length(abscissa) - 1), length(abscissa) - >>> > 1)))) { >>> > # other stuff >>> > } >>> > >>> > Does someone have some suggestions to improve this control? Thanks in >>> > advance!! :) >>> > >>> > Marc >>> > >>> > [[alternative HTML version deleted]] >>> > >>> >>> >>> -- >>> Sarah Goslee >>> http://www.functionaldiversity.org >>> >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.