From macq at llnl.gov  Mon Jan 18 19:21:13 2010
From: macq at llnl.gov (Don MacQueen)
Date: Mon, 18 Jan 2010 10:21:13 -0800
Subject: [Rd] order() fails on a chr object of class "AsIs" with "\265"
 in it
In-Reply-To: <alpine.LFD.2.00.1001160703230.7459@gannet.stats.ox.ac.uk>
References: <p06240812c776abcb3a13@[128.115.67.9]>
	<alpine.LFD.2.00.1001160703230.7459@gannet.stats.ox.ac.uk>
Message-ID: <p06240800c77a55e916e2@[128.115.67.9]>

Prof. Ripley,

Thank you for the explanation. I appreciate both understanding what's 
happening, and having several options for fixing my scripts.

-Don

At 7:17 AM +0000 1/16/10, Prof Brian Ripley wrote:
>On Fri, 15 Jan 2010, Don MacQueen wrote:
>
>>Here's an example (session info at the end).
>>
>>>  tmpv <- c('\265g/L','Bq/L')
>>>  order(tmpv)
>>[1] 2 1
>>>  tmpv <- I(tmpv)
>>>  order(tmpv)
>>Error in if (xi > xj) 1L else -1L : missing value where TRUE/FALSE needed
>>>  foov <- gsub('\265','',tmpv)
>>>  order(foov)
>>[1] 2 1
>>>  str(tmpv)
>>Class 'AsIs'  chr [1:2] "\265g/L" "Bq/L"
>>>  str(foov)
>>Class 'AsIs'  chr [1:2] "g/L" "Bq/L"
>>
>>I can easily work around this in my scripts, but shouldn't order() 
>>succeed with such an object?
>
>Not in the C locale.  There is no pre-defined ordering for non-ASCII 
>characters in that locale and the string is invalid in a strict C 
>locale.
>
>>(I suppose this could be Mac-specific, but I'm assuming it's not...)
>
>No, but the handling of invalid strings in C is OS-specific.
>
>>For context:
>>The character "\265" causes the Greek letter mu to be displayed in 
>>various output devices. For example, the character vector 
>>eventually gets written to an html file, which when displayed in 
>>Firefox (Mac) is displayed as Greek mu. Also in Excel 2004 (Mac).
>>
>>I first wrote these scripts 6 years ago, when "\265" was a way I 
>>could find to display the Greek mu in output text files of various 
>>kinds. They worked as recently as 3 months ago. Maybe there's a 
>>better way now to display a mu in text-based contexts?
>
>Use UTF-8 and Unicode \u03BC (http://*www.*alanwood.net/unicode/greek.html).
>
>The issue is that you need a xtfrm method for 'AsIs': it falls back 
>to comparisons via .gt and those (correctly) fail.
>
>xtfrm.AsIs <- function(x) xtfrm(unclass(x))
>
>would keep get you going until you fix the scripts.
>
>>
>>>  sessionInfo()
>>R version 2.10.1 (2009-12-14)
>>i386-apple-darwin8.11.1
>>
>>locale:
>>[1] C
>>
>>attached base packages:
>>[1] stats     graphics  grDevices utils     datasets  methods   base
>>
>>Thanks
>>-Don
>>--
>>--------------------------------------
>>Don MacQueen
>>Environmental Protection Department
>>Lawrence Livermore National Laboratory
>>Livermore, CA, USA
>>925-423-1062
>>
>>______________________________________________
>>R-devel at r-project.org mailing list
>>https://*stat.ethz.ch/mailman/listinfo/r-devel
>>
>
>--
>Brian D. Ripley,                  ripley at stats.ox.ac.uk
>Professor of Applied Statistics,  http://*www.*stats.ox.ac.uk/~ripley/
>University of Oxford,             Tel:  +44 1865 272861 (self)
>1 South Parks Road,                     +44 1865 272866 (PA)
>Oxford OX1 3TG, UK                Fax:  +44 1865 272595


-- 
--------------------------------------
Don MacQueen
Environmental Protection Department
Lawrence Livermore National Laboratory
Livermore, CA, USA
925-423-1062



[Rd] order() fails on a chr object of class "AsIs" with "\265" in it
Don MacQueen