Selecting dynamically from a list
- To: mathgroup at smc.vnet.net
- Subject: [mg84691] Selecting dynamically from a list
- From: John Jowett <John.M.Jowett at gmail.com>
- Date: Thu, 10 Jan 2008 02:24:44 -0500 (EST)
Hello,
While writing this post, I found the solution myself. At the
risk of making myself look a bit slow, let me communicate it anyway.
Conceivably it may help someone else who doesn't find the solution
obvious.
I have an application where, in essence, I would like to visually pick
a few values out of a list to make a new list. I can do it at a basic
level with
mylist = {a, b, c, d, e, f};
CheckboxBar[Dynamic[mychoice0], mylist]
which displays a row of check boxes. After picking a couple I find
that the variable mychoice0 has simply been assigned a value {a,c,e},
for example. I can then go on and calculate other things with it,
e.g.,
Length[mychoice0] which returns 2.
So far, so good. Then I try to build on that, by writing a function
to pick from an arbitrary list. After some trial and error, I came up
with
choosein[myl_List] := Module[{mychoice1 = {}},
Print[CheckboxBar[Dynamic@mychoice1, myl]];
Dynamic[mychoice1]]
and try it out with
myc = choosein[mylist]
Sure enough this displays an output corresponding to my choice from
the check boxes. However if I try to do anything else with the
variable myc, I quickly find out that it is not what it appears to be
and cannot be used in calculations. This was puzzling until I
discovered that
myc1 = Setting[myc]
will give the list I wanted. However it is NOT possible to
incorporate the call to Setting in the definition of the function
choosein.
Can anyone improve on this approach ?
John Jowett