Re: Select and Cases Give Different Answers
- To: mathgroup at smc.vnet.net
- Subject: [mg99173] Re: [mg99125] Select and Cases Give Different Answers
- From: Gregory Lypny <gregory.lypny at videotron.ca>
- Date: Wed, 29 Apr 2009 06:05:48 -0400 (EDT)
- References: <20090428134831.JDRAS.77548.imail@eastrmwml30>
Hi Bob, When you write that "Unequal doesn't make any assumptions about a Rational," do you mean that the result is unexpected, as I thought, and that this is the reason? Thanks for the cool alternatives. My library of routines is getting pretty big from all of the contributions of Mathgroup members! Regards, Gregory On Tue, Apr 28, 2009, at 1:48 PM, Bob Hanlon wrote: > theList = {"NA", "NA", -0.01315, 0.0120957, -1/41, 0.00625, "NA", > "NA", 5/8, > "NA"}; > > Unequal doesn't make any assumptions about a Rational > > # != "NA" & /@ theList > > {False, False, True, True, > -(1/41) != "NA", True, False, > False, 5/8 != "NA", False} > > You can force it with N > > f1 = Select[theList, N[#] != "NA" &] > > {-0.01315, 0.0120957, -(1/41), > 0.00625, 5/8} > > Here are some other alternatives > > f1 == Cases[theList, _?(N[#] != "NA" &)] > > True > > fl == Cases[theList, _?NumericQ] > > True > > fl == Select[theList, NumericQ] > > True > > fl == DeleteCases[theList, "NA"] > > True > > fl == DeleteCases[theList, _?StringQ] > > True > > fl == DeleteCases[theList, _?(! NumericQ[#] &)] > > True > > fl == Select[theList, ! # === "NA" &] > > True > > fl == Cases[theList, _?(! # === "NA" &)] > > True > > fl == Select[theList, # =!= "NA" &] > > True > > fl == Cases[theList, _?(# =!= "NA" &)] > > True > > fl == Cases[theList, Except["NA"]] > > True > > fl == Cases[theList, Except[_?StringQ]] > > True > > fl == DeleteCases[theList, Except[_?NumericQ]] > > True > > fl == (theList /. "NA" :> Sequence[]) > > True > > fl == (theList /. _?StringQ :> Sequence[]) > > True > > fl == Last[GatherBy[theList, NumericQ]] > > True > > fl == Last[GatherBy[theList, StringQ]] > > True > > f1 == Pick[theList, NumericQ /@ theList] > > True > > f1 == Pick[theList, Not /@ StringQ /@ theList] > > True > > f1 == Pick[theList, (N[#] != "NA") & /@ theList] > > True > > f1 == Pick[theList, Thread[N[theList] != "NA"]] > > True > > > Bob Hanlon > > ---- Gregory Lypny <gregory.lypny at videotron.ca> 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 > >