Re: multiple outputs from a function
- To: mathgroup at smc.vnet.net
- Subject: [mg52790] Re: [mg52753] multiple outputs from a function
- From: DrBob <drbob at bigfoot.com>
- Date: Mon, 13 Dec 2004 04:22:53 -0500 (EST)
- References: <200412111022.FAA06563@smc.vnet.net>
- Reply-to: drbob at bigfoot.com
- Sender: owner-wri-mathgroup at wolfram.com
A function can't evaluate to more than one value, but it can evaluate to a List of values: data = RandomArray[BinomialDistribution[12, .1], 12] stats[s_] := {Mean@s, Variance@s, StandardDeviation@s} stats@data {0, 0, 3, 1, 0, 1, 1, 2, 2, 2, 2, 2} {4/3, 32/33, 4*Sqrt[2/33]} or stats[s_] := Through[{Mean, Variance, StandardDeviation}@s] stats@data {4/3, 32/33, 4*Sqrt[2/33]} or stats[s_] := Thread[{Mean, Variance, StandardDeviation} -> Through[{Mean, Variance, StandardDeviation}@s]] stats@data Mean /. % {Mean -> 4/3, Variance -> 32/33, StandardDeviation -> 4*Sqrt[2/33]} 4/3 Bobby On Sat, 11 Dec 2004 05:22:57 -0500 (EST), Ben Barrowes <barrowes at alum.mit.edu> wrote: > I feel I must be missing something fundamental... > > How do you write a function (or ?) in Mathematica which produces more > than one output? > > Let's say I have some data and I want a single function to calculate the > mean, variance, std, etc, more than one thing and return those? I know > that there are builtin functions for those parameters, but the point is > I want to define functions with more than one output. > > The only examples I can find are along the lines of: > > f[x_,y_]:=x^2+y^2; > > which have only a single result. > > Is there a different structure altogether, such as a Subroutine, which > allows multiple results from a single subunit? > > One thought I had was that because Mathematica treats everything as > global unless defined specifically local (e.g. in a module), that > variables used in a procedure would be accessible and would thus be a > "result", but it seems scoping problems would arise if this was used too > often. For example: > > In[67]:= > t1[x_,y_]:=(a1=x^2+y;a2=x+y^2;x+y) > > In[68]:= > t2=t1[5,6] > > Out[68]= > 11 > > In[69]:= > a1 > > Out[69]= > 31 > > In[70]:= > a2 > > Out[70]= > 41 > > Is this the accepted method for extracting multiple results from one > function definition? > > > Ben Barrowes > > > > -- DrBob at bigfoot.com www.eclecticdreams.net
- References:
- multiple outputs from a function
- From: Ben Barrowes <barrowes@alum.mit.edu>
- multiple outputs from a function