# Rule based command on lists

Posted 8 years ago
3956 Views
|
2 Replies
|
0 Total Likes
|
 Hello group,I'm trying to translate a program written in the R language into Mathematica. R is a statistical language and is similar to Mathematica in many respects. There is one command called ifelse(test, result if true, result if false) that operates on two lists. What it does in this instance is to generate a list A from the two lists ca and p: A=ifelse(abs(ca) > p, sign(ca),0) The resulting list A contains the sign of a value in the list ca if the absolute value of the element ca is greater than the corresponding value of the element in list p (p is all positive values), and 0 otherwise. I haven't been able to do this in Mathematica without going to a Do procedural command. Is there a rule based command for doing this? John Reed
2 Replies
Sort By:
Posted 8 years ago
 del
Posted 8 years ago
 Study the help pages for these functions until you think you understand itAnd test it carefully before you depend on it.Method 1: In[1]:= ca = {-5, 2, 1, -4}; p = {4, 3, 0, 2}; f[{ca_, p_}] := If[Abs[ca] > p, Sign[ca], 0]; Map[f, Transpose[{ca, p}]] Out[4]= {-1, 0, 1, -1} Method 2. Perhaps more cryptic, but more in the usual Mathematica programming style. In[5]:= ca = {-5, 2, 1, -4}; p = {4, 3, 0, 2}; Map[ If[Abs[#[[1]]] > #[[2]], Sign[#[[1]]], 0] &, Transpose[{ca, p}]] Out[6]= {-1, 0, 1, -1}