MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

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


  • Prev by Date: Re: Re: Can't assign value to symbols
  • Next by Date: Re: Re: Can't assign value to symbols
  • Previous by thread: Re: Re: Can't assign value to symbols
  • Next by thread: Re: Re: Can't assign value to symbols