On Mon, Apr 12, 2010 at 11:15 PM, Alan Busby <thebu...@gmail.com> wrote:

> On Tue, Apr 13, 2010 at 11:54 AM, Douglas Philips <d...@mac.com> wrote:
>
>> On 2010 Apr 12, at 10:48 PM, Glen Rubin wrote:
>>
>>> I am working with a collection of integer sequences ...(e.g.
>>> coll:
>>> ((3 7 3 5 9 2 0 8 4 0 1 2323 4 11...) (243 4 664 478 3948...) (6 3 7 4
>>> 3335 2 4 5 7 6...)...)
>>>
>>> I want to create an average sequence such that all of the first
>>> elements are averaged, all of the second elements, etc....
>>>
>>> However, I am unable to manipulate the collection.  If I try something
>>> simple like:
>>>
>>> (map + coll)
>>>
>>> I get java.lang.ClassCastException
>>>
>>
>> Take a look at apply, it sounds as if you want something akin to:
>> (apply map + coll)
>>
>> --Doug
>
>
> Or maybe?
> Further help lurking in Clojure IRC. ;)
>
> user=> (use '[clojure.contrib.seq-utils :only (flatten)])
> nil
> user=> (map + (flatten '((1 2 3) (4 5 6))))
> (1 2 3 4 5 6)
>

I don't even understand that result.. but what the OP asked for is for a
function foo such that
(foo '((1 2 3) (4 5 6))) returns (5 7 9) - a list of the sums in order.
 (apply map +) does that.

Except what the OP really wants the average instead of the sum.. there's
probably an arithmetic mean function in contrib somewhere, but it's easy to
roll your own:

(defn mean [& rest] (/ (apply + reset) (count rest)))

And then use the same trick with it in place of +:

(apply map mean '((1 2 4) (2 4 6) (1 3 5)))

which yields (4/3 3 5)


-- 
Mark J. Reed <markjr...@gmail.com>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

To unsubscribe, reply using "remove me" as the subject.

Reply via email to