El siguiente código ayuda a crear nuevas tablas con buena, pero solo se puede elegir una selección para mala población con la ventana de partición abierta. Quiero que la pantalla de partición esté abierta, pero el usuario puede seleccionar más de un nodo de hoja para la mala población y el resto irá a la buena población. ¿Hay alguna forma de hacer esto?
dt = Open("$SAMPLE_DATA\semiconductor capability.jmp");
filepath = "$Desktop";
nw = New window("part test",
V List Box(
obj = dt << Partition(
Y(:NPN1),
X(:PNP1, :PNP2, :PNP3, :PNP4, :NPN2, :NPN3, :NPN4),
Method("Decision Tree")
),
Button box("make splits",
make_splits_expr
);
)
);
obj << ShowGraph(0);
obj << SplitBest(4);
obj << Show Split Count(1);
obj << Show Split Prob(1);
make_splits_expr = Expr(
sel_rows = dt << Get Selected Rows;
If(N Items(sel_rows > 0),
dtTemp = dt << subset(invisible, rows(), selected columns(0));
Close(dtTemp, save(filepath || "\" || "badpopulation.jmp"));
dt << invert row selection;
sel_rows = dt << Get Selected Rows;
dtSEG = dt << subset(invisible, selected rows(1), selected columns(0));
Close(dtSEG, save(filepath || "\" || "goodpopulation.jmp"));
);
dt << Clear Selected;
);Quiero poder seleccionar los nodos resaltados en amarillo como mala población y descansar como buena población manteniendo abierta esta ventana de partición y cambiar la selección de nodo si no estoy satisfecho con el resultado.

¿Hay alguna manera de hacer que suceda?
Aquí hay una puñalada en él:
lstSelectedRows = {};
dt = Open("$SAMPLE_DATA\semiconductor capability.jmp");
filepath = "$Desktop";
nw = New window("part test",
V List Box(
obj = dt << Partition(
Y(:NPN1),
X(:PNP1, :PNP2, :PNP3, :PNP4, :NPN2, :NPN3, :NPN4),
Method("Decision Tree")
),
HListBox(
TextBox("rows selected in node = "),
tb1 = TextBox("0"),
),
HListBox(
TextBox("total rows selected = "),
tb2 = TextBox("0")
),
ButtonBox("clear all selections",
clear_selections
, underlinestyle(1)
),
Button box("make splits",
make_splits_expr
);
)
);
// in the partition platform from any node you can select rows
// but we need to detect this event ... do it by detecting
// row state changes in the table
rs = dt << make row state handler(
function({a},
cdt = current data table();
sel = cdt << Get Selected Rows;
insertinto(lstSelectedRows,aslist(sel));
tmp = [=>];
insertInto( tmp, lstSelectedRows );
lstSelectedRows = tmp << getKeys; // <--- dedupe
tb1 << settext(char(nrows(sel)));
tb2 << settext(char(nitems(lstSelectedRows)));
)
);
obj << ShowGraph(0);
obj << SplitBest(4);
obj << Show Split Count(1);
obj << Show Split Prob(1);
clear_selections = Expr(
dt << Clear Selected;
tb1 << settext("0");
tb2 << settext("0");
lstSelectedRows = {};
);
make_splits_expr = Expr(
dt << select rows(lstSelectedRows);
sel_rows = dt << Get Selected Rows;
tb1 << settext(char(nrows(sel_rows)));
If(N Items(sel_rows > 0),
dtTemp = dt << subset(rows(), selected columns(0), output table("Selected"));
//Close(dtTemp, save(filepath || "\" || "badpopulation.jmp"));
dt << invert row selection;
sel_rows = dt << Get Selected Rows;
dtSEG = dt << subset(selected rows(1), selected columns(0), output table("Not Selected"));
//Close(dtSEG, save(filepath || "\" || "goodpopulation.jmp"));
);
dt << Clear Selected;
);
Es posible que no haya entendido lo que está tratando de hacer, por lo que no intentaré explicar qué está pasando con el código, pero si es lo que está tratando de hacer, me complacerá darle una explicación de lo que está pasando. sólo házmelo saber.Parte del código es un poco feo, pero solo quería ver si podía entender lo que estabas tratando de hacer.Para mi propia comodidad, en lugar de guardar 2 tablas en el escritorio, creo 2 (tablas visibles) tituladas 'seleccionadas' y 'no seleccionadas'.