Re: Apply function to parts of a list
- To: mathgroup at smc.vnet.net
- Subject: [mg86366] Re: Apply function to parts of a list
- From: Roland Franzius <roland.franzius at uos.de>
- Date: Sun, 9 Mar 2008 05:05:21 -0500 (EST)
- References: <fqo8pn$svq$1@smc.vnet.net> <fqqs3l$kfp$1@smc.vnet.net> <fqtqog$da4$1@smc.vnet.net>
guerom00 schrieb: > Thank you very much for all the answers ! Great ! > > More generally now : Again I have a list of list but with more > "dimensions" Something like that : > > data={{x1,y1,z1,f1,g1,h1},{x2,y2,z2,f2,g2,h2},{x3,y3,z3,f3,g3,h3},... > {xn,yn,zn,fn,gn,hn}} > > And let's say I wanna, for the sake of the example, add 10 to all the > y's i.e. I want > > {{x1,y1+10,z1,f1,g1,h1},{x2,y2+10,z2,f2,g2,h2},{x3,y3+10,z3,f3,g3,h3},... > {xn,yn+10,zn,fn,gn,hn}} > > According to all your suggestions, I could do > > {#1,#2+10,#3,#4,#5,#6}& @@@ data > > Right ? Isn't there another simpler way (imagine instead of 6 elements > (x,y,z,f,g,h), I have 100 !) > Set smb=ToString/@{x,y,z,f,g,h} nmb=ToString/@Range[3] X = ToExpression@Outer[#2 <> #1 &, nmb, smb] {{x1, y1, z1, f1, g1, h1}, {x2, y2, z2, f2, g2, h2}, {x3, y3, z3, f3, g3, h3}} You can MapAt Plus[#,10]& MapAt[# + 10 &, #, {2}] & /@ X or you Replace Symbols according to Position Part 2 X /. {a_Symbol?(Position[X, #][[1, 2]] == 2 &) :> a + 10} or you add a matrix X + Array[If[#2 == 2, 10, 0] &, Dimensions[X]] You can even pick symbols beginning with y independent of their position X /. a_?(StringTake[ToString[#], 1] == "y" &) :> a + 10 -- Roland Franzius