異なる行フィルターでユーザー関数を呼び出す方法はありますかごめんなさい。私はタイトルでそれを最もよく説明する方法はありませんが、私が現在持っているものと私が達成したかったことを説明しようとします:
私が持っているもの:
だから私はCol Min、Max、Meanを計算するこの関数を持っています
col_stats = Function( { COL_NAME }, {},
curr_dt = Cuurent Data Table();
min_val = Col Min ( curr_dt:Eval(COL_NAME));
max_val = Col Max ( curr_dt:Eval(COL_NAME));
mean_val = Col Mean ( curr_dt:Eval(COL_NAME));
Eval List({min_val, max_val, mean_val});
);私が達成したいこと:
特定のリストの組み合わせを使用してデータをフィルタリングし、col_stat関数を呼び出すことができるようにしたいです。
リストの数はユーザーに基づいて変更できます。以下の例では、ユーザーがtempとvccを選択しています(ユーザーは頻度などを追加できます)
temperature = {-40, 0, 25, 100};<BR />vcc = {1.2, 1.26, 1.32};col_stat関数を使用して最小最大平均を取得できるようにしたい
-40および1.20V
-40および1.26V
等々。
リストの数がわかっている場合は、2つのforループを使用して2つのリストの組み合わせを反復処理できることはわかっていますが、ユーザーがリストを追加できるようにリストを拡張したい
私はそれをうまく説明したことを願っています。
スクリプティングRe:異なる行フィルターでユーザー関数を呼び出す方法はありますかこれについての私の考えは、データテーブルで選択された行でのみ機能するように、関数にかなり単純な変更を加える必要があるということです。 関数の呼び出しを含むShow()は、データテーブルBig Classが開いていることを前提としています。
col_stats = Function( {dt, COL_NAME},
{defaultlocal},
min_val = Col Min( If( Selected( Row State( Row() ) ), column(dt, COL_NAME ), . ) );
max_val = Col Max( If( Selected( Row State( Row() ) ), column(dt, COL_NAME ), . ) );
mean_val = Col Mean( If( Selected( Row State( Row() ) ), column(dt, COL_NAME ), . ) );
Return( Eval List( {min_val, max_val, mean_val} ) );
);
show(col_stats(dt,"height"));
選択した行でのみ計算を行うことにより、次の機能を使用できます。
dt << Where()を選択
必要なアイテムの組み合わせを定義し、関数を呼び出して結果を取得します。
また、すべてを1つの選択場所に強制する必要はありません。 Select Whereの定義を見ると、いくつかのSelect Where()句を渡して最終的な全体の選択を動的に構築し、現在の選択からコントラクトを拡張するかどうかを指定できることがわかります(つまり、-40のすべての行が現在選択されている場合、JMPに「vccのみ1.20」の修飾を追加するように指示できます。
Re:異なる行フィルターでユーザー関数を呼び出す方法はありますかネストされたループを使用する:{{温度}、{vccs}}?
Re:異なる行フィルターでユーザー関数を呼び出す方法はありますか
Where句を使用している場合は、目的の行の値を取得し、行列メソッドを使用する方が少し速い場合があります。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
col_stats = Function( {dt, rows, COL_NAME},
{defaultlocal},
vals = column(dt, COL_NAME )[rows];
min_val = Min( vals );
max_val = Max( vals );
mean_val = Mean( vals );
Return( Eval List( {min_val, max_val, mean_val} ) );
);
show(col_stats(dt, dt<<GET rows="" where=""></GET>
これは、メモリと速度のトレードオフになります。2つの追加のベクトルがありますが、JSL評価でループや条件を必要としません。
Re:異なる行フィルターでユーザー関数を呼び出す方法はありますかネストされたforループを実行するには、2つのリストに対して2つのforループをハードコーディングする必要があります。
ユーザーがfreq = {10、20、30}のようなフィルターのリストを追加すると機能しないので、それは避けたいです。
「By」リストにtemp、wafer、vccを追加すると、Distributionの「By」と同じように機能し、temp、wafer&vccのすべての組み合わせの分布が生成されます。しかし、私は自分の機能で動作することが好きです。