Alex, 'with_collate' is one of the functions included in the withr package ( https://cran.rstudio.com/web/packages/withr/). So you could simply write
sort_c <- function(x) withr::with_collate("C", sort(x)) The usage semantics and implementation are essentially identical to what Hadley described. Jim On Sun, Sep 20, 2015 at 1:22 PM, Hadley Wickham <h.wick...@gmail.com> wrote: > Hi Alex, > > As far as I know, that's the best solution. In roxygen, I've wrapped > it up with a couple of helpers: > > set_collate <- function(locale) { > cur <- Sys.getlocale(category = "LC_COLLATE") > Sys.setlocale(category = "LC_COLLATE", locale = locale) > cur > } > > with_collate <- function(locale, code) { > old <- set_collate(locale) > on.exit(set_collate(old)) > > force(code) > } > > sort_c <- function(x) with_collate("C", sort(x)) > > Hadley > > On Fri, Sep 18, 2015 at 4:25 PM, Alex Deckmyn <alex.deck...@meteo.be> > wrote: > > Hi, > > > > For an update of the maps package, I have run into a bug caused by the > locale-depent behaviour of order(). > > In a certain function, the polygon names of the world map are lexically > sorted with order() prior to being sent to a C routine. That routine > expects them to be sorted according to ASCII rules, but that is not the > result I get. The main culprit is the colon used to identify sub-regions. > For instance, in my locale (en_GB_UTF-8), I get > > > > "uk:northen ireland" < "ukrain" < "uk:scotland" > > > > which is not the order expected by C. I guess some language settings > would also cause other unexpected results. > > > > Apart from the pain of fixing uk/ukrain ambiguities, is there a safe way > to fix this order() in a package? An obvious solution seems to be > > > > lcc <- Sys.getlocale("LC_COLLATE") > > Sys.setlocale("LC_COLLATE","C") > > ord.nam <- order(nam) > > Sys.setlocale("LC_COLLATE",lcc) > > > > This seems to work fine on my linux PC, but I am not sure about other > platforms (Windows, OS-X...), though the "C" locale should be standard. Is > this safe? Or is there a better way to get the right ordering? > > > > Alex > > > > --- > > Dr. Alex Deckmyn e-mail: alex.deck...@meteo.be > > Royal Meteorological Institute http://www.meteo.be > > Ringlaan 3, 1180 Ukkel, Belgium tel. (32)(2)3730646 > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-package-devel@r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-package-devel > > > > -- > http://had.co.nz/ > > ______________________________________________ > R-package-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-package-devel > [[alternative HTML version deleted]] ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel