Re: Select and Cases Give Different Answers

*To*: mathgroup at smc.vnet.net*Subject*: [mg99168] Re: [mg99125] Select and Cases Give Different Answers*From*: Andrzej Kozlowski <akoz at mimuw.edu.pl>*Date*: Wed, 29 Apr 2009 03:49:28 -0400 (EDT)*References*: <200904280842.EAA28447@smc.vnet.net>

On 28 Apr 2009, at 17:42, Gregory Lypny wrote: > Hello everyone, > > Suppose I have the following list that is a mixture of the string "NA" > and five numeric quantities. > > theList = {"NA", "NA", -0.01315, 0.0120957, -1/41, 0.00625, "NA", > "NA", 5/8, "NA"} > > I want to weed out the NAs, and all of the following > > Cases[theList, _?NumericQ] > > DeleteCases[theList, _?StringQ] > > Select[theList, # =E2=88=88 Reals &] > > Select[theList, # =!= "NA" &] > > work fine because each returns {-0.01315, 0.0120957, -(1/41), 0.00625, > 5/8}. > > But I don't understand why Unequal, when used as the criterion for > Select as in > > Select[theList, # != "NA" &], > > fails to return the rationals, and I get only three elements > {-0.01315, 0.0120957, 0.00625}. I'd appreciate any clarification on > the difference between UnsameQ and Unequal because my inclination in > most circumstances is to use an equal sign or an unequal sign to make > simple comparisons yet it doesn't give me the answer I expect, and I'd > hate to make a costly mistake somewhere down the road! > > Regards, > > Gregory > I think that there is indeed something strange here, but it it the opposite of what you seem to find strange. To me the strange thing here is the difference between strings and symbols and between exact and approximate numbers . Replace your strings "NA" by symbols NA and note that now you get: Select[theList2, #1 != NA & ] {} which is what I would have expected also in your example. In the case of a symbol Unequal and UnsameQ are different, as one would expect: UnsameQ[x, 2] True Unequal[x, 2] x != 2 An undefined symbol x is certainly "not the same as" (i.e. not identical) the number 2, but it could be equal to it (depending on the context) so Unequal[x,2] can't be answered. But when we replace x by the string "x" things become mysterious. First of all we have: UnsameQ["x", 2] True Unequal["x", 2] True so now there is no difference between UnsameQ and Unequal. One might think that Strings are never equal to numbers (which would be reasonable, since they can't be assigned values) but then: "x" =!= 2/3 True "x" != 2/3 "x" != 2/3 so when we have a rational on the RHS strings behave the same as symbols! But not so with reals: "x" =!= N[2/3] True "x" != N[2/3] True By the way, if we replace Rational[2,3] with Complex[2,3] the behaviour will remain the same. All this is puzzling to me and I can't see any other explanation but that this is just an unintended side- effect of something. Obviously it does not make any mathematical sense to ask the question whether a string is equal to a rational number of a real, so I would not attach any semantic significance to these answers. Andrzej Kozlowski

**References**:**Select and Cases Give Different Answers***From:*Gregory Lypny <gregory.lypny@videotron.ca>