Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

Possible Duplicate:
How to avoid returning a Null if there is no “else” condition in an If contruct

I know there are other ways to solve this problem. Just because I'm curious I tried:

Map[If[# == 1, , #] &, {2, 1, 3, 1, 4}]

This should return a list without the value 1, because when the statement is true it should do nothing. The solution should be:

{2,3,4}

and not

{2,Null,3,Null,4}

Why is it not working as I expect?

share|improve this question

marked as duplicate by Mr.Wizard Dec 21 '12 at 14:59

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

    
DeleteCases[{2, 1, 3, 1, 4},1] –  ssch Dec 21 '12 at 10:03
    
thank you ssch. I know that this works. Just wanted to know if there is a possibility to get the solution out of the if directly. –  RMMA Dec 21 '12 at 10:06
2  
Map[If[# == 1, Unevaluated[Sequence[]], #] &, {2, 1, 3, 1, 4}] in that case :) –  ssch Dec 21 '12 at 10:08
1  
Frink, please try to make an effort to find existing questions which address your problem before asking a new one. In this case a search for "If Null" would have brought up the proper question as the first result. –  Mr.Wizard Dec 21 '12 at 15:03
    
Another duplicate: mathematica.stackexchange.com/q/3447/5 –  rm -rf Dec 21 '12 at 15:50

1 Answer 1

up vote 6 down vote accepted

Your If statement is actually

If[# == 1, Null, #]

so it is working perfectly. Try evaluating

Hold@Map[If[# == 1, , #] &, {2, 1, 3, 1, 4}]

to see for yourself. To get what you want, try

Map[If[# == 1, Unevaluated@Sequence[], #] &, {2, 1, 3, 1, 4}]
share|improve this answer
    
thx, exactly what I was looking for :-) –  RMMA Dec 21 '12 at 10:22
1  
Maybe mentioning If[x > 1, , 2] // FullForm, which evaluates to If[Greater[x, 1], Null, 2], is also useful –  acl Dec 21 '12 at 10:31
1  
Incidentally, Unevaluated@Sequence[] can be replaced with ##&[] which I call a "vanishing function." –  Mr.Wizard Dec 21 '12 at 15:01
    
@Mr.Wizard. ##&[] is a neat trick! –  m_goldberg Dec 21 '12 at 17:21

Not the answer you're looking for? Browse other questions tagged or ask your own question.