This operator "pipes" data from the source
g1 into the sink
g2. Both source and sink can either be
Graph or a
PipeOp (or an object that can be automatically converted into a
%>>% tries to automatically match output channels of
g1 to input channels of
g2; this is only possible if either
the number of output channels of
g1 (as given by
g1$output) is equal to the
number of input channels of
g2 (as given by
g1 has only one output channel (i.e.
g1$output has one line), or
g2 has only one input channel, which is a vararg channel (i.e.
g2$input has one line, with
Connections between channels are created in the
order in which they occur in
g1's output channel 1 is connected to
channel 1, channel 2 to 2 etc.
This operator always created deep copies of its input arguments, so they cannot be modified by reference afterwards.
To access individual
PipeOps after composition, use the resulting
Both arguments of
%>>% are automatically converted to
as_graph(); this means that objects on either side may be objects
that can be automatically converted to
PipeOps (such as
Filters), or that can
be converted to
Graphs. This means, in particular,
PipeOps or objects convertible to that, because
as_graph() automatically applies
lists. See examples.
g1 %>>% g2
o1 = PipeOpScale$new() o2 = PipeOpPCA$new() o3 = PipeOpFeatureUnion$new(2) # The following two are equivalent: pipe1 = o1 %>>% o2 pipe2 = Graph$new()$ add_pipeop(o1$clone(deep = TRUE))$ add_pipeop(o2$clone(deep = TRUE))$ add_edge(o1$id, o2$id) # Note automatical gunion() of lists. # The following three are equivalent: graph1 = list(o1, o2) %>>% o3 graph2 = gunion(list(o1, o2)) %>>% o3 graph3 = Graph$new()$ add_pipeop(o1$clone(deep = TRUE))$ add_pipeop(o2$clone(deep = TRUE))$ add_pipeop(o3$clone(deep = TRUE))$ add_edge(o1$id, o3$id, dst_channel = 1)$ add_edge(o2$id, o3$id, dst_channel = 2)