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 >> >> >> > > > >