Re: Select and Cases Give Different Answers
- To: mathgroup at smc.vnet.net
- Subject: [mg99165] Re: [mg99125] Select and Cases Give Different Answers
- From: Gregory Lypny <gregory.lypny at videotron.ca>
- Date: Wed, 29 Apr 2009 03:48:56 -0400 (EDT)
- References: <200904280842.EAA28447@smc.vnet.net>
Good stuff, Andrzej. This certainly calls for a bug report. Maybe it's best if the tech people at Wolfram are simply directed to this thread. Gregory On Tue, Apr 28, 2009, at 8:38 AM, Andrzej Kozlowski wrote: > > 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 > > > >
- Follow-Ups:
- Re: Re: Select and Cases Give Different Answers
- From: Daniel Lichtblau <danl@wolfram.com>
- Re: Re: Select and Cases Give Different Answers
- References:
- Select and Cases Give Different Answers
- From: Gregory Lypny <gregory.lypny@videotron.ca>
- Select and Cases Give Different Answers