問題を小さな部分に分割します。 次のような非常に単純なものから始めます (JMP17 を使用しているため、私の構文は JMP14 では機能しない可能性があります)
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#)
);
このタイプのスクリプトを使用すると問題をすでに解決できますが、このようなものを使用してテストする方がはるかに簡単です。
このようなスクリプトでは、以下のようなことができるため、おそらく Eval(EvalExpr()) を使用することになります (EvalExpr() 部分を実行するだけで評価される式が表示されます)。

Y 軸列の名前を変更するためだけに Transform を使用している場合は、Transform Column を使用するよりも簡単なオプションがある可能性があります。
この部分が機能するようになったら、フィルターやスケーリングに取り組み始めますが、これらを同時に実行しないでください。
返信いただきありがとうございます。 コードの他のすべてのコンポーネントはすでに個別に検証済みであるため、追加の複雑さについては心配していませんでした。
投稿したコードの最初の部分は、JMP14 では機能しません。 エラー メッセージは、「すべての行に欠損値があるか除外されているため、By グループの 1 つの列にデータがありません。
変動チャートの関数呼び出しを Eval(EvalExpr()) でラップし、変換内の列名を Expr(Name Expr(AsColumn())) でラップすることで、解決策を見つけました。
以下は 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# )
);
非常に簡単に言うと、いくつかの変動チャートをモジュール化しようとしています。 これらのチャートをプロットしたい異なるパラメーターは合計 3 ~ 4 つあるため、関数にキーを渡してどの列をプロットするかを指示し、その列の特定の処理をセットアップさせる必要があります。 つまり、プロット操作の一部としてその列がどのような種類の変換を受ける必要があるかということです。
私が開始した方法は、文字列を渡し、一連の条件文を使用して変換する列の名前 (colname) を指定し、次に変換に適用する文字列 (yname) を指定することです。
これを行うためにいくつかの方法を試しましたが、どの解決策を使用しても、プロットを正しく機能させることができません。 変動チャートの Y をハードコーディングすると、指定されたフィルターに対して常に正しく機能するため、データが存在することはわかりますが、私の変数アプローチを使用してデータを選択することはできないようです。 これは、これまでvarチャートのYラインで試したことです。
- Y( Transform Column( yname, Formula( Column(colname) ) ) ),
- JMP アラート: 無効な引数 (ダイアログ ボックス)
- すべての行に欠損値があるか除外されているため、グループにはデータがありません (ログ ウィンドウ)
- Y( Transform Column( yname, Formula( Column(dt,colname) ) ) ),
- JMP アラート: 無効な引数 (ダイアログ ボックス)
- すべての行に欠損値があるか除外されているため、グループにはデータがありません (ログ ウィンドウ)
- Y( Transform Column( yname, Formula( Column( As Column(colname)) ) ) ),
- JMP アラート: 未解決の列が 256 回発生しました (ダイアログ ボックス)
- 「無効な引数が 256 回あります。すべての行に欠損値があるか除外されているため、1 つの列またはグループにデータがありません (ログ)」
- Y( Transform Column( yname, Formula( Column( As Column(dt,colname)) ) ) ),
- JMP アラート: スコープ付きデータ テーブル アクセスにはデータ テーブル列または変数が 256 回必要です (ダイアログ ボックス)
- 無効な引数が 256 回発生しました。すべての行に欠損値があるか除外されているため、1 つの列またはグループにデータがありません (ログ)
- Y( Transform Column( yname, Formula( As Column(colname) ) ) ),
- JMP アラート: 未解決の列が 267 回発生しました (ダイアログ ボックス)
- (ログエラーなし)
- Y( Transform Column( yname, Formula( As Column(dt,colname) ) ) ),
- JMP アラート: スコープ付きデータ テーブル アクセスにはデータ テーブル列または変数が 267 回必要です (ダイアログ ボックス)
- (ログエラーなし)
私の試みでは明らかではないとしても、As Column() と Column() の違いが何であるかはまだ明確ではありません。 フォーラムでどちらかまたは両方の解決策を見たことがあるので、すべて試してみましたが、解決できませんでした。 私が確認した唯一の手がかりは、As Column() を単独で使用した場合、Column() でラップした場合 (256 件) と比較して、アクセス違反の数 (267 件) が異なるということです。 変換式の列名をハードコーディングすると 267 行が正しくプロットされるため、フィルターによって返される「正しい」行数は 267 であることがわかります。
さらに、colname変数を列に直接設定し(colname = :Rおよびcolname = ":R")、それらを直接使用したり、Column()とAs Column()の組み合わせでラップしたりするさまざまな組み合わせを試してみました。同様に機能しますが、成功しません。
私がここで何を間違っているかわかる人はいますか?
注: このコードそのものはテストされておらず、変数名は汎用化されています。
//
// 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>