Re: Problem with the 'if' command

• To: mathgroup at smc.vnet.net
• Subject: [mg96617] Re: Problem with the 'if' command
• From: "Nasser Abbasi" <nma at 12000.org>
• Date: Tue, 17 Feb 2009 06:27:04 -0500 (EST)
• References: <gncme2\$fid\$1@smc.vnet.net>
• Reply-to: "Nasser Abbasi" <nma at 12000.org>

```"mathandpi" <mathandpi at yahoo.com> wrote in message
news:gncme2\$fid\$1 at smc.vnet.net...
> 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
>

Your check for even is wrong. You were actually hitting the else part.
Better to use EvenQ

newMedian[list_] := Module[{len = Length[list]},
If[ EvenQ[len],
(1/2)*(list[[len/2 + 1]] +list[[len/2]]),
list[[(len + 1)/2]]
]
]

newMedian[{1, 2, 3, 4}]
5/2

--Nasser

```

• Prev by Date: Re: Problem with the 'if' command
• Next by Date: weird interpolation issues
• Previous by thread: Re: Problem with the 'if' command
• Next by thread: Re: Problem with the 'if' command