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>