mlr3pipelines
mlr3pipelines copied to clipboard
Replace Sugraph
A potentially useful operation on a Graph would be to replace a PipeOp, or an entire subgraph, with a different Graph. With this, one could "edit" the result of a ppl() call, for example, if the pipeline happens to have a single / very few pipeops that are different than what would be desired. Currenlty the user would have to edit the connection table to do this, which may be a bit tedious.
Suggested UI for this would be Graph$replace_subgraph(ids, substitute), substitute being something that can be turned into a graph using as_graph. The operation would remove ids from the graph, and do the equivalent of <channels into ids> %>>% substitute %>>% <channels out of ids> inside the graph (This would entail automatic one-to-many and vararg channel handling, as well as type checking).
Which (newly free) output channels to connect to new graph, and in what order?
- take original graph, remember output_orig as the entire graph's output channels (
graph$output) - delete IDs of pipeops that are being cut out, and remove their edges (obvsly)
- look what new
graph$outputchannels there are. Set-subtractoutput_origfrom these - use these output channels & this order to connect to new graph
- should be in-place
we want a complementary function that gives us the IDs of all pipeops that are "between" two (or more) pipeops.
edge cases to watch out for: entire graph, beginning of graph, end of graph
vararg will be difficult...
should work the same as %>>% I would say
Also $remove_pipeop() which removes edges and updates param_set