Teilen Sie Ihr Problem in kleinere Teile auf. Beginnen Sie mit etwas sehr Einfachem wie (meine Syntax funktioniert möglicherweise nicht für JMP14, da ich JMP17 verwende)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Variability Data/2 Factors Crossed.jmp");
yname = "namechange";
col_name = "Measurement";
var_chart = Variability Chart(
Y(Transform Column(yname, Formula(colname))),
X(:Operator, :part#)
);
Mit dieser Art von Skript können Sie bereits Probleme bekommen, aber es ist viel einfacher, mit so etwas zu testen.
Bei einem Skript wie diesem würde ich höchstwahrscheinlich auf die Verwendung von Eval(EvalExpr()) zurückgreifen, da es mir ermöglicht, etwas wie das Folgende zu tun (ich kann den Ausdruck sehen, der ausgewertet wird, wenn ich nur den Teil EvalExpr() ausführe).

Wenn Sie „Transformieren“ nur zum Umbenennen der Y-Achsen-Spalte verwenden, gibt es möglicherweise einfachere Optionen als die Verwendung von „Spalte transformieren“.
Nachdem Sie diesen Teil zum Laufen gebracht haben, ist es an der Zeit, sich mit den Filtern oder der Skalierung zu befassen, aber tun Sie dies nicht gleichzeitig.
Danke für die Antwort. Ich habe alle anderen Komponenten des Codes bereits einzeln validiert, sodass ich mir über die zusätzliche Komplexität keine Sorgen machte.
Der erste Codeausschnitt, den Sie gepostet haben, funktioniert in JMP14 nicht. Die Fehlermeldung lautet: „Eine Spalte der Gruppe „Nach“ enthält keine Daten, da in allen Zeilen Werte fehlen oder ausgeschlossen sind.
Ich habe eine Lösung gefunden, indem ich den Funktionsaufruf des Variabilitätsdiagramms mit Eval(EvalExpr()) umschließt und dann den Spaltennamen in die Transformation in Expr(Name Expr(AsColumn())) einschließt.
Folgendes funktioniert in JMP 14
Names Default To Here( 1 );
dt = Open(
"$SAMPLE_DATA/Variability Data/2 Factors Crossed.jmp"
);
yname = "namechange";
col_name = "Measurement";
Variability Chart(
Y( Transform Column( yname, Formula( as column(col_name)) ) ),
X( :Operator, :part# )
);
Ganz einfach: Ich versuche, einige Variabilitätsdiagramme zu modularisieren. Insgesamt gibt es 3-4 verschiedene Parameter, für die ich diese Diagramme zeichnen möchte. Daher muss ich der Funktion einen Schlüssel übergeben, um ihr mitzuteilen, welche Spalte gezeichnet werden soll, und damit sie eine bestimmte Behandlung dieser Spalte einrichten kann. Nämlich welche Art von Transformation diese Spalte im Rahmen des Plotvorgangs durchlaufen muss.
Ich habe damit begonnen, eine Zeichenfolge zu übergeben und dann eine Reihe von Bedingungen zu verwenden, um den Namen der zu transformierenden Spalte (colname) und dann die auf die Transformation anzuwendende Zeichenfolge (yname) anzugeben.
Ich habe mehrere Methoden ausprobiert, um dies zu erreichen, und egal welche Lösung ich verwende, ich bekomme die Handlung nicht richtig zum Laufen. Die harte Codierung des Y des Variabilitätsdiagramms funktioniert für die angegebenen Filter immer korrekt, sodass ich weiß, dass Daten vorhanden sind. Ich kann sie mit meinem Variablenansatz einfach nicht auswählen. Folgendes habe ich bisher für die Y-Linie des Var-Diagramms versucht:
- Y( Transform Column( yname, Formula( Column(colname) ) ) ),
- JMP-Warnung: Ungültiges Argument (Dialogfeld)
- Die Gruppe verfügt über keine Daten, da alle Zeilen fehlende Werte aufweisen oder ausgeschlossen sind (Protokollfenster).
- Y( Transform Column( yname, Formula( Column(dt,colname) ) ) ),
- JMP-Warnung: Ungültiges Argument (Dialogfeld)
- Die Gruppe verfügt über keine Daten, da alle Zeilen fehlende Werte aufweisen oder ausgeschlossen sind (Protokollfenster).
- Y( Transform Column( yname, Formula( Column( As Column(colname)) ) ) ),
- JMP-Warnung: Ungelöste Spalte 256 Mal (Dialogfeld)
- „Ungültiges Argument 256 Mal, eine Spalte oder Gruppe enthält keine Daten, da alle Zeilen fehlende Werte aufweisen oder ausgeschlossen sind (Protokoll)
- Y( Transform Column( yname, Formula( Column( As Column(dt,colname)) ) ) ),
- JMP-Warnung: Der bereichsbezogene Datentabellenzugriff erfordert 256 Mal eine Datentabellenspalte oder -variable (Dialogfeld)
- 256-mal ungültiges Argument. Eine Spalte oder Gruppe enthält keine Daten, da in allen Zeilen Werte fehlen oder ausgeschlossen sind (Protokoll).
- Y( Transform Column( yname, Formula( As Column(colname) ) ) ),
- JMP-Warnung: Ungelöste Spalte 267 Mal (Dialogfeld)
- (keine Protokollfehler)
- Y( Transform Column( yname, Formula( As Column(dt,colname) ) ) ),
- JMP-Warnung: Der bereichsbezogene Datentabellenzugriff erfordert 267 Mal eine Datentabellenspalte oder -variable (Dialogfeld)
- (keine Protokollfehler)
Auch wenn es bei meinen Versuchen nicht offensichtlich ist, ist mir immer noch nicht klar, was der Unterschied zwischen As Column() und Column() ist. Ich habe in Foren Lösungen für beides gesehen, also habe ich sie alle ausprobiert und bin nicht weitergekommen. Der einzige Hinweis, den ich sehe, ist, dass ich bei unabhängiger Verwendung von As Column() eine andere Anzahl von Zugriffsverletzungen erhalte (267) als wenn es von Column() umschlossen wird (256). Ich weiß, dass 267 die „richtige“ Anzahl von Zeilen ist, die von diesem Filter zurückgegeben werden sollen, da durch die Hartcodierung des Spaltennamens in der Transformationsformel 267 Zeilen korrekt dargestellt werden.
Außerdem habe ich versucht, die Variable colname direkt auf die Spalte zu setzen (colname = :R und colname = ":R") und verschiedene Kombinationen, diese direkt zu verwenden und/oder sie in Kombinationen aus Column() und As Column() zu verpacken. Funktioniert auch ohne Erfolg.
Kann jemand sehen, was ich hier falsch mache?
Hinweis: Dieser genaue Code ist ungetestet, Variablennamen wurden generisiert.
//
// Build plot functions
//
var_chart = Function( {dutname, ytype, stressname, bias, ver},
{chart, ax_min, ax_max, ax_step, len, colname, yname},
<BR /> ax_min = 0;<BR /> ax_max = 1;<BR /> ax_step = 0.1;<BR />
If(ytype == "r", (colname = "R"; yname = "R [Ω]"));<BR /> If(ytype == "l", (colname = "L"; yname = "L [H]"));<BR /> If(ytype == "c", (colname = "C"; yname = "C [F]"));
If(stressname == "s1", len = 1.1);
If(stressname == "s2", len = 2.2);
If(stressname == "s3", len = 3.3);
chart = Variability(
Y( Transform Column( yname, Formula( As Column(colname) ) ) ),
X( :X1, :X2, :X3, :X4 ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
Show Box Plots( 1 ),
<<SET scale=""></SET>