Re: Thread::tdlen: Objects of unequal length in
- To: mathgroup at smc.vnet.net
 - Subject: [mg127773] Re: Thread::tdlen: Objects of unequal length in
 - From: Bill Rowe <readnews at sbcglobal.net>
 - Date: Tue, 21 Aug 2012 04:59:32 -0400 (EDT)
 - Delivered-to: l-mathgroup@mail-archive0.wolfram.com
 - Delivered-to: l-mathgroup@wolfram.com
 - Delivered-to: mathgroup-newout@smc.vnet.net
 - Delivered-to: mathgroup-newsend@smc.vnet.net
 
On 8/20/12 at 4:14 AM, aaron.sokolik at gmail.com (Aaron) wrote:
>I'm new to Mathematica and trying to run rebuild some programs from
>other systems in Mathematica.  I'm operating on large data lists and
>receiving the unequal length error.  However, if I simply paste the
>output without the extra curly bracket into an operation, everything
>works.  Obviously, copying and pasting wont work for functions...
>How can I get around this?
>Below are the functions I'm using to generate two lists from a
>single dataset:
>ln[13]:= MapThread[Mean, Sequence[{{testdata}}]]
It is not entirely clear as to what is being assigned to
testdata. So, I will assume you have two simple (1D) lists of
equal length. For example, starting with
a = RandomInteger[{0, 10}, 5];
b = RandomInteger[{11, 20}, 5];
Then I can set testData to
testData = {a, b};
With this I can do
In[4]:= MapThread[Mean[{##}] &, testData]
Out[4]= {13/2,13,11,27/2,29/2}
note the difference in syntax and note I get a list of 5
elements. That is I am averaging the first element of list a
with the first element of list b and so forth.
Notice
In[5]:= Dimensions[testData]
Out[5]= {2,5}
That is testData consists of two lists of equal length. Notice
In[6]:= Dimensions[Sequence[{{testData}}]]
Out[6]= {1,1,2,5}
additionally
In[7]:= Dimensions[{{testData}}]
Out[7]= {1,1,2,5}
That is Sequence isn't doing what you think and if you have
defined testData as I have above the result then {{testData}}
will not have the dimensional structure needed by MapThread. In
fact, MapThread is not needed at all since
In[8]:= Mean[testData]
Out[8]= {13/2,13,11,27/2,29/2}
produces exactly the same result. And if the your desire was to
have return the mean of list a along with the mean of list b
rather than averaging an element of list a with the
corresponding element of list b, you could do either
In[9]:= Mean /@ testData
Out[9]= {36/5,81/5}
or
In[9]:= Mean /@ testData
Out[9]= {36/5,81/5}