Hallo JMP-Experten,
Irgendwie glaube ich, dass mein Beitrag gerade gelöscht wurde, also poste ihn noch einmal
Ich habe eine DOE-Tabelle mit vielen vorhergesagten Formeln. Diese Formeln haben eine X- und Y-Achsenbeziehung
Ich möchte die Datentabelle in das folgende Format umordnen, damit ich ein Oberflächendiagramm (X, Y, Wert) zeichnen kann, um zu sehen, wie es sich ändert, wenn ich Parameter ändere

Zwei Probleme:
1. Ich kann Formeln erhalten und sie dann in das folgende Format verketten, wenn (Zeile == 1, Formel 1, wenn (Zeile == 2, Formel 2 usw.)
Aber irgendwann ist die Formel ein langes Zeichen mit „“, ich muss „“ manuell entfernen, damit die Formel funktioniert
2. Ich verwende das H-Listenfeld, um den Wert abzurufen, und stelle jede Zeile so ein, dass Parameter geändert werden, sodass ich sehen kann, wie sich das Oberflächendiagramm ändert. Aber idealerweise würde ich gerne die Scroll-Leiste verwenden, um den Parameter zu ändern, damit ich die Änderungen reibungsloser sehen kann
dt = data table("example DOE table");
dt2 = current data table();
colname = dt << get column names();
colnamelist = {};
formulalist = {};
loopword = char("If( Row() == ");
mid = char("");
final = char("");
//Get column names with predicted formula
for (i = 1, i <= N items(colname),i++,
pos = Contains (colname[i], "Pred F");
if(pos == 1 , insert into(colnamelist, colname[i]), continue())
);
//Get formula from columns and save into list
for each({colval}, colnamelist,
eval(evalexpr(
formula = Char(Expr(Name Expr(As Column(dt,colval))) << get formula());
));
insert into (formulalist, formula)
);
//Concat formulas to below format: If( row == 1, Formula 1, If( row ==2, Forumla 2, If( row == 3, formula 3)))......etc
for (i=1, i <= N rows() , i++,
mid = mid || loopword || char(i) || ", " || char(formulalist[i]) || ", "
);
final = mid || char("0");
for (i=1, i <= N rows() , i++,
final = final || char(")")
);
eval(evalexpr(
:height << set formula(expr(final))
));
nw = New Window( "process paramaeter setting",
H List Box( Text Box( " Input Parameter A " ), A = Number Edit Box() ),
H List Box( Text Box( " Input Parameter B " ), B = Number Edit Box() ),
H List Box( Text Box( " Input Parameter C " ), C = Number Edit Box() ),
H List Box( Text Box( " Input Parameter D " ), D = Number Edit Box() ),
Button Box( "OK",
theA = A << get;
theB = B << get;
theC = C << get;
theD = D << get;
:Parameter A << set each value(theA);
:Parameter B << set each value(theB);
:Parameter C << set each value(theC);
:Parameter D << set each value(theD);
//Somehow the column with formula cannot draw into surface plot directly, so I have to copy and paste value to anohter column to draw
newheight = :height << get values;
:newheight<< set values(newheight);
)
)
Es hört sich so an, als müssten Sie für Ihre Eingabe Schiebereglerfelder anstelle der Zahlenbearbeitungsfelder verwenden
Danke Jim, eine Slider-Box ist genau das, was ich suche.
Aber noch etwas: Ich erstelle ein Schaltflächenfeld, um den Wert aus dem Schiebereglerfeld abzurufen, und stelle dann jeden Wert so ein, dass die Zeilen geändert werden. Ist es möglich, die Zeile in Echtzeit als Schieberegler zu ändern, ohne zusätzliches Kontrollkästchen?
Value = 0;
New Window( "Example",
Panel Box( "Parameter setting",
tb = Text Box( "Parameter A: " || Char( Value ) ),
sb = Slider Box( 0, 1, Value, tb << Set Text( "Value: " || Char( Value ) ) ),
Button Box( "OK",
:Parameter A << set each value(Value)
)
)
);
Ich habe es gefunden, ein einfaches parse() kann für meine erste Frage ausreichen
seval(evalexpr(
:height << set formula(expr(parse(final)))
));
Aber für die zweite Frage wäre es wirklich schön, wenn wir eine Bildlaufleiste hätten, um jeden Wert festzulegen, damit der Benutzer leicht überprüfen kann, wie sich die 3D-Karte ändert, wenn sich der Parameter ändert.
Suchen Sie im Scripting-Index nach der Slider-Box() und Sie werden Folgendes sehen:
Syntax: Box = Slider Box (min. Wert, max. Wert, Variable, SCRIPT , ,
Sie können das JSL aus Ihrem OK-Button übernehmen und in die Definition der Slider Box() einfügen. Es wird jedes Mal ausgeführt, wenn der Slider bewegt wird.
Dies hat mein Problem perfekt gelöst. Vielen Dank, Jim, für deine Unterstützung.