Re: Re: Re: Can't assign value to symbols
- To: mathgroup at smc.vnet.net
- Subject: [mg58507] Re: [mg58458] Re: [mg58444] Re: [mg58409] Can't assign value to symbols
- From: Bruce Colletti <vze269bv at verizon.net>
- Date: Tue, 5 Jul 2005 01:57:46 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Andrzej
Using your reply, I offer this code for Lee's consideration.
Although it works when first run, if re-run without quitting the kernal, the "X= line" causes an error because a,b,c are instantiated.
At the start of the program, how can I clear these variables WITHOUT explicitly declaring them? I've failed to find the right argument for Clear (e.g., Clear at Subscript...can't find the right counterpart for Subscript).
Thankx.
Bruce
T={{a,b,c},{3,4,2},{12,2,1},{6,5,-3}};
X=Map[SymbolName,T[[1]]];
Do[Apply[Clear,ToExpression[X,StandardForm,Unevaluated]];
Print@MapThread[Set,{ToExpression[X,StandardForm,Unevaluated],T[[k]]}],
{k,2,Length@T}];
=====================
From: Andrzej Kozlowski <akozlowski at gmail.com>
To: mathgroup at smc.vnet.net
Subject: [mg58507] [mg58458] Re: [mg58444] Re: [mg58409] Can't assign value to symbols
Instead of ToExpression use
ToExpression[#, StandardForm, Unevaluated] &
For example:
In[1]:=
parameters = {{"a", "b", "c"}, {1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
In[2]:=
MapThread[(#1 = #2) & , {ToExpression[#,StandardForm,Unevaluated]& /@
parameters[[1]],
parameters[[3]]}] ;
In[3]:=
a
Out[3]=
4
In[4]:=
MapThread[(#1 = #2) & , {ToExpression[#,StandardForm,Unevaluated]& /@
parameters[[1]],
parameters[[2]]}] ;
In[5]:=
a
Out[5]=
1
Of course instead of Standardform you can use TraditionalForm or even
InputForm.
Andrzej Kozlowski
Chiba, Japan
On 2 Jul 2005, at 17:07, Lee Newman wrote:
> 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
>>
>>
>>
>
>
>
>