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