20
$\begingroup$

This works:

list // BarChart[#[[2]], ChartLabels -> DateString @@@ #[[1]], ChartStyle -> "Pastel"] &

This doesn't:

list // BarChart[#[[2]], ChartLabels -> 
    DateString[#, {"ShortDay", "/", "ShortMonth"}] & @@@ #[[1]], ChartStyle -> "Pastel"] &

The difference is that in the second version DateString needs to be an anonymous function. But the entire expression already is an anonymous function. Since this won't work, how can I do what I want to do? Is the best way perhaps to define DateString[#,..] somewhere else, or can I solve this with parentheses or something like that?

$\endgroup$
22
$\begingroup$

You can always use Function to create anonymous functions:

Function[{a},a^2]

is equivalent to

#^2&

and can be used as such, but it is unambiguous.

It can be used as:

Function[{a},a^2][2]

(* ==> 4  *)
$\endgroup$
23
$\begingroup$

You can always string several anonymous functions together, but you'll also have to pay attention to operator precedence. In this case, you had to enclose the anonymous function in parentheses. Replace the corresponding line in your second example with the following and it works.

ChartLabels -> (DateString[#, {"ShortDay", "/", "ShortMonth"}] & @@@ #[[1]])

You can read this documentation page for more info on operator precedences. In your specific case, Rule or -> has a higher precedence than Function or &.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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