Re: variable number of controls in manipulate
- To: mathgroup at smc.vnet.net
- Subject: [mg105590] Re: variable number of controls in manipulate
- From: dh <dh at metrohm.com>
- Date: Thu, 10 Dec 2009 04:57:12 -0500 (EST)
- References: <hffjje$6s2$1@smc.vnet.net> <4B1F75D6.2080003@metrohm.com> <BLU0-SMTP71F163BD113CE19DA9E23DAC8E0@phx.gbl>
Hi Greg, if you use the prefix form of a function you must take care of the precedence. If you are not sure, use the infix notation: Manipulate[ Evaluate[(k = Total[(Table[list[[i]], {i, nvar}] - 1)*varmultipliers] + 1); k], ##] &@(Sequence @@ Table[{{list[[i]], 1, vartitles[[i]]}, Table[j -> varvalues[[i, j]], {j, nvars[[i]]}]}, {i, nvar}]) Daniel Greg Colbourn wrote: > Hi Daniel, > > That works, but I still can't use k for anything else after it's assignment: > > (*edit these to contain more or less variables,with more or less values > for \ > each variable:*) > > vartitles = {"emissions", "Weathering scheme", "Ca weath feedbcak", > "Si weath feedback"}; > varvalues = {{"none", "1000GtC", "3000GtC", "5000GtC"}, {"Globavg", "GKWM", > "GEM_CO2"}, {"on", "off"}, {"on", "off"}}; > nvars = Table[Length[varvalues[[i]]], {i, Length[varvalues]}]; > nvar = Length[nvars]; > Format[v[n_Integer]] := "v" <> ToString[n]; > list = Array[v, nvar]; > varmultipliers = > Append[Reverse[ > Table[Product[nvars[[n]], {n, nvar, nvar - m, -1}], {m, 0, nvar - > 2}]], 1]; > (*this generates ensemble number corresponding to variable selection:*) > > Manipulate[(*k=*) > Evaluate@(k = Total[(Table[list[[i]], {i, nvar}] - 1)*varmultipliers] > + 1); > k, ##] &@(Sequence @@ > Table[{{list[[i]], 1, vartitles[[i]]}, > Table[j -> varvalues[[i, j]], {j, nvars[[i]]}]}, {i, nvar}]) > > doesn't work. I wan't to use k to pick out parts of an array. > > Cheers, > Greg > > > On 9 Dec 2009, at 10:03, dh wrote: > >> Hi Greg, >> Evaluate is only activated if it is the argument of a function with >> one of the Hold attributes, like e.g. Manipulate[ Evaluate[..],..]. >> However, if you say: Manipulate[k= Evaluate[..],..], then Evaluate is >> an argument of Set, not of Manipulate and has no effect. >> therefore: >> >> Manipulate[Evaluate@(k = Total[... >> >> Daniel >> >> >> Greg Colbourn wrote: >>> Hi. >>> I'm running ensembles of models and want to look at the results in >>> Mathematica in an automated way. Part of this revolves around >>> automatically generating lists of buttons corresponding to variables >>> using Manipulate - the number of variables to loop over is itself >>> variable(!). >>> I can work out automatically a number corresponding to an individual >>> ensemble member depending on which variables are chosen: >>> (* edit these to contain more or less variables, with more or less >>> values for \ >>> each variable: *) >>> vartitles = {"emissions", "Weathering scheme", "Ca weath feedbcak", >>> "Si weath feedback"}; >>> varvalues = {{"none", "1000GtC", "3000GtC", "5000GtC"}, {"Globavg", >>> "GKWM", >>> "GEM_CO2"}, {"on", "off"}, {"on", "off"}}; >>> nvars = Table[Length[varvalues[[i]]], {i, Length[varvalues]}]; >>> nvar = Length[nvars]; >>> Format[v[n_Integer]] := "v" <> ToString[n]; >>> list = Array[v, nvar]; >>> varmultipliers = >>> Append[Reverse[ >>> Table[Product[nvars[[n]], {n, nvar, nvar - m, -1}], {m, 0, nvar - >>> 2}]], 1]; >>> (* this generates ensemble number corresponding to variable selection: *) >>> Manipulate[ >>> (*k=*)Evaluate[ >>> Total[(Evaluate[Table[Evaluate[list][[i]], {i, nvar}]] - 1)* >>> varmultipliers] + 1], ##] &@(Sequence @@ >>> Table[{{list[[i]], 1, vartitles[[i]]}, >>> Table[j -> varvalues[[i, j]], {j, nvars[[i]]}]}, {i, nvar}]) >>> However, when I want to do anything with this number (removing the >>> commented out "k="), it becomes a list of symbols and no longer a >>> number, despite me using Evaluate. Ideally, I want to be able to use >>> this number (k) as an index to pick out data from arrays. >>> What do I need to do? >>> Greg Colbourn >> >> >> > -- Daniel Huber Metrohm Ltd. Oberdorfstr. 68 CH-9100 Herisau Tel. +41 71 353 8585, Fax +41 71 353 8907 E-Mail:<mailto:dh at metrohm.com> Internet:<http://www.metrohm.com>