Re: Problem with the 'if' command
- To: mathgroup at smc.vnet.net
- Subject: [mg96603] Re: [mg96578] Problem with the 'if' command
- From: DrMajorBob <btreat1 at austin.rr.com>
- Date: Tue, 17 Feb 2009 06:24:30 -0500 (EST)
- References: <200902162139.QAA15951@smc.vnet.net>
- Reply-to: drmajorbob at longhorns.com
"Length[list]/2 == 0" is the VERY wrong test. Clear[median, x] median[x_List] := Module[{n = Length@x, s = Sort@x}, If[OddQ@n, s[[(n + 1)/2]], Mean@s[[n/2 + {0, 1}]]] ] Array[median@Range@# &, 10] {1, 3/2, 2, 5/2, 3, 7/2, 4, 9/2, 5, 11/2} Array[Median@Range@# &, 10] {1, 3/2, 2, 5/2, 3, 7/2, 4, 9/2, 5, 11/2} Bobby On Mon, 16 Feb 2009 15:39:19 -0600, mathandpi <mathandpi at yahoo.com> wrote: > Hi everyone, > I'm a new Mathematica user so I may be missing something fairly obvious, > but I'm having trouble with the 'if' command. > I'm writing a function that is supposed to return the median of a list > (I know such a function already exists, but I need to create one myself). > > What I have is: > > newMedian[list_] := > If[Length[list]/2 == 0, > 1/2*(list[[(Length[list]/2) + 1]] + list[[(Length[list])/2]]) > , list[[(Length[list] + 1)/2]]] > > if the list has an off number of members (condition is false), it > evaluates as expected. If it's even, however, > > newMedian[{1, 2, 3, 4}] returns: > Part::pspec: Part specification 5/2 is neither an integer nor a list of > integers. > > BUT > > list={1,2,3,4}; > > 1/2*(list[[(Length[list]/2) + 1]] + list[[(Length[list])/2]]) > returns 5/2, as expected so that code is right. > > It seems likes its actually evaluating the false part of the code > (trying to find the 5/2'ith element in a list), even though the > condition is true. > > What's going on here? > > Thanks > -- DrMajorBob at longhorns.com
- References:
- Problem with the 'if' command
- From: mathandpi <mathandpi@yahoo.com>
- Problem with the 'if' command