Re: Modification to Thread or MapThread
- To: mathgroup at smc.vnet.net
- Subject: [mg26398] Re: [mg26380] Modification to Thread or MapThread
- From: BobHanlon at aol.com
- Date: Wed, 20 Dec 2000 00:21:26 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
V1 = Array[v, {4, 3}];
container2 = {c21, c22, c23, c24};
You left off a set of list brackets in your expression
soln1 = f @@@ Transpose[{V1, Table[container2, { Length[V1] } ]}];
soln2 = f[#, container2] & /@ V1;
soln3 = Thread[f[V1, container2], List, 1];
soln4 = ReleaseHold[Thread[f[V1, Hold[container2]]]];
soln5 = Module[{c}, Thread[f[V1, c]] /. c -> container2];
soln6 = Module[{c}, Thread[f[V1, c @@ container2]] /. c -> List];
Pick a solution and define your function
threadFirst[func_Symbol, v_List, const_] := (func[#, const] & /@ v);
soln1 == soln2 == soln3 == soln4 == soln5 == soln6 ==
threadFirst[f, V1, container2]
True
Bob Hanlon
In a message dated 12/16/00 3:22:36 AM, cjohnson at shell.faradic.net writes:
>I have a vector V1 of objects of type container1 and a single object of
>container2.
>
>I want to create the vector resulting from applying f over each
>item in V1 and container2, or...
>{ f[ V1[[1]], container2], f[ V1[[2]], container2], ...}
>
>Best case and most intuitive to me is simply try f[V1, container2]. I
>believe this would work if the function was "Listable", but it isn't.
>Unfortunately, the way f is defined, this doesn't work. The solution so
>far (Thanks to help from this list!) is to use the following syntax...
>
>f @@@ Transpose[V1, Table[container2, { Length[V1] } ]
>
>Is there a better way? Can I generalize the definitions of functions so
>they can understand this type of syntax? Or even create my own function
>which automagically threads vectors of objects and single objects?
>
>The main intent, I suppose, is to avoid generating a table that seems
>unnecessary and feels sloppy. If avoiding the table creation isn't
>possilble, getting it done behind the scenes would be an improvement to
>me. A little paint over the duct tape, as it were.
>