Besoin d'aide avec le script JSL pour la sélection de partitions multi-segmentsLe code suivant permet de créer de nouvelles tables avec une bonne population, mais une seule sélection peut être choisie pour une mauvaise population avec la fenêtre de partition ouverte. Je souhaite que l'écran de partition soit ouvert, mais l'utilisateur peut sélectionner plusieurs nœuds feuilles pour la mauvaise population et le reste ira à la bonne population. Y a-t-il un moyen de faire cela?
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;
);Je veux pouvoir sélectionner les nœuds surlignés en jaune comme mauvaise population et le repos comme bonne population en gardant cette fenêtre de partition ouverte et modifier la sélection de nœud s'il n'est pas satisfait du résultat.

Existe-t-il un moyen d'y parvenir ?
Accès aux donnéesles fenêtresRe : Besoin d'aide avec le script JSL pour la sélection de partitions multi-segmentsEn voici un aperçu :
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;
);
Je n'ai peut-être pas compris ce que vous essayez de faire et je n'essaierai donc pas d'expliquer ce qui se passe avec le code - mais si c'est ce que vous essayez de faire, je serai heureux de vous expliquer ce qui se passe - faites-le-moi savoir.Une partie du code est un peu moche, mais je voulais juste voir si je pouvais comprendre ce que vous essayiez de faire.Pour ma propre commodité, au lieu d'enregistrer 2 tables sur le bureau, j'en crée 2 (tables visibles) intitulées « sélectionnées » et « non sélectionnées ».