Re: Can't assign value to symbols
- To: mathgroup at smc.vnet.net
- Subject: [mg58469] Re: Can't assign value to symbols
- From: Peter Pein <petsie at dordos.net>
- Date: Sun, 3 Jul 2005 03:57:26 -0400 (EDT)
- References: <da5jcd$243$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Lee Newman schrieb:
> Thanks for the solutions. I'm running with David Park's solution, but
> now realize there is one additional problem. Once I've executed the
> statement MapThread[(#1 = #2) & , {parameters[[1]], parameters[[3]]}] ,
> because I've specified the first row of "parameters" as symbols, this
> row now loses the symbol names and takes on the assigned values, such
> that my attempt to execute the MapThread Statement again for a different
> set of values, e.g. parameters[[2]], fails.
>
> in: MapThread[(#1 = #2) & , {parameters[[1]], parameters[[3]]}] ;
> in: {a,b,c}
> Out: {4,5,6}
> in: MapThread[(#1 = #2) & , {parameters[[1]], parameters[[2]]}] ;
> out: Set:: setraw : Cannot assign to raw object 4 ... etc
>
> I want to preserve the first row of "parameters" as the symbol names, so
> one solution is to use strings, and modify David Park's solution to turn
> the strings into symbol names when assigned, This works the first time
> it is run, and parameters[[1]] still contains the strings, but ut still
> fails the second time. but why?
> in: parameters = {{"a", "b", "c"}, {1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
> in: MapThread[(#1 = #2) & , {ToExpression /@ parameters[[1]],
> parameters[[3]]}] ;
> in: {a,b,c}
> out {4,5,6}
> in: MapThread[(#1 = #2) & , {ToExpression /@ parameters[[1]],
> parameters[[3]]}] ;
> out: Set:: setraw : Cannot assign to raw object 4 ... etc
>
> why does the MapThread statement fail the second time? It seems
> ToExpression/@parameters[[1]] converts the strings "a", "b", "c" to
> symbols but then evaluates them prior to returning them, so the attempt
> to assign to them in MapThread fails.
>
> How can I modify the MapThread statement so I can call it multiple
> times, each time assigning values to the symbols identified by the
> strings in the first row??
>
> Lee
>
>
>
> David Park wrote:
>
>>Lee,
>>
>>Set (=) has a higher precedence Than Function (&). So all you have to do is
>>add parentheses.
>>
>>parameters = {{a, b, c}, {1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
>>
>>MapThread[(#1 = #2) & , {parameters[[1]], parameters[[3]]}]
>>{4, 5, 6}
>>
>>David Park
>>djmp at earthlink.net
>>http://home.earthlink.net/~djmp/
>>
>>From: Lee Newman [mailto:leenewm at umich.edu]
To: mathgroup at smc.vnet.net
>>
>>
>>Hello,
>>
>>Situation: I have a table that contains parameters and sets of values
>>that I want to assign to the parameters for the purposes of running a
>>simulation.
>>- parameters = {{a,b,c},{1,2,3},{4,5,6},{7,8,9}}
>>- want to assign values in a given row to the symbols listed in the
>>first row.
>>- tried using: MapThread[ #1 = #2 &, {parameters[[1]], parameters[[3]]} ]
>>- fails with error "Tag Slot in #1 is Protected"
>>- tried adding Unprotect[#1] and a variety of other attemps, but can't
>>get it to work.
>>
>>Anyone know how might accomplish this?
>>
>>Thanks,
>>Lee
>>
>>
>
Hi Lee,
use Clear to clear the assigned values:
In[1]:=
parameters = {{a, b, c}, {1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
MapThread[(#1 = #2) & , {parameters[[1]], parameters[[3]]}];
{a, b, c}
Out[3]=
{4, 5, 6}
In[4]:=
Clear[a, b, c];
MapThread[(#1 = #2) & , {parameters[[1]], parameters[[2]]}];
{a, b, c}
Out[6]=
{1, 2, 3}
--
Peter Pein
Berlin
- Follow-Ups:
- Re: Re: Can't assign value to symbols
- From: stephen layland <layland@wolfram.com>
- Re: Re: Can't assign value to symbols