こんにちは、
次のスクリプトを使用しています役職スクリプトから作成されたヒートマップを拡張してみます。 現在の形式のスクリプトは、すべての列のヒートマップをまとめて実行しますが、列ごとに個別のヒートマップが必要です。 つまり、特定の列の最小値、中間値、最大値を見つけて、その列にのみヒートマップを適用し、次の列に対して同じことを実行して続行したいと思います。
添付は以下です
1. sample_base_table.jmp:これは抽出されるデータのサンプルセットです。
2. extract_cols.jsl:これはヒートマップスクリプトに使用されるデータを要約するスクリプトです
3. heatmap.jsl:このスクリプトは、指定された列のヒートマップを実行します
問題:
extract_cols.jslを実行すると、「UntitledX」という名前の4つの新しいデータテーブルが取得されます。 次に、heatmap.jslを実行すると、最後に作成された無題のXテーブルのヒートマップしか作成できません。 なぜなのかわかりません... デバッガーコードを見ると、「「列」のアクセスまたは評価で列が見つかりませんでした」と表示されます。 ただし、使用されている列「Median(Values、Mango)」を印刷すると表示されるため、何が起こっているのかわかりません(下の出力画像を参照)。

改善/将来の作業:
理想的には、最後に作成されたデータテーブルのみが更新される理由を理解した後、フルーツのこれら4つのヒートマップ列すべてを1つのデータテーブルに連結します。このデータテーブルには、国とフルーツの情報も含まれています。 つまり、4つの(32x3)テーブルを生成していて、1つの(6x32)テーブル(4つのフルーツヒートマップ+国の列+場所の列)を生成したいと思います。 現在私が行っている方法は、JMPクエリビルダーを使用して列の連結を行うことです。
指定しています
Names Default To Here( 1 );
これにより、その特定のスクリプト用に個別のメモリ名前空間が作成されます。つまり、extract_colsスクリプトには、「fruit」という名前のリストがあります。ヒートマップスクリプトで指定した場合
myFruit = fruit[1];
ヒートマップスクリプトは、fruitという変数について何も知りません。
ヒートマップスクリプトで、変数「dt」を現在のデータテーブルに等しく設定します。説明から、extract_colsスクリプトを実行した直後にヘッドマップスクリプトを実行しています。JMPでは常に、現在アクティブなデータテーブルであるデータテーブルは1つだけです。したがって、指定するとき
dt = Current Data Table();
ヒートマップスクリプトは、extract_colsスクリプトで作成した最後のデータテーブルとなる現在のアクティブなデータテーブルを取得します
元のデータテーブル参照を2番目のスクリプトに渡し、場合によっては他の4つのデータテーブル参照を渡す必要がある場合、これを行う1つの方法は、別の名前空間を作成し、その名前空間に参照を配置することです。スクリプトを変更すると、名前空間が作成され、データテーブル参照がその中に配置されます。
Names Default To Here( 1 );
Clear Symbols();
dt = Current Data Table();
if(isnamespace("trans")==0, trans = new namespace("trans"));
trans:theList = {};
insert into(theList,dt);
fruit = {"Apple","Banana","Mango","Orange"};
For(i = 1, i <= N Items(fruit), i++,
obj = dt << Tabulate(
Set Format( Uniform Format( 10, 0 ) ),
Add Table(
Column Table(
Statistics( Median ),
Grouping Columns( :fruits ),
Analysis Columns( :Values )
),
Row Table( Grouping Columns( :Countries, :locations ) )
),
Local Data Filter(
Add Filter(
columns( :fruits),
Where( :fruits == fruit[i] ),
Display( :fruits, N Items( 14 ) )
)
)
);
trans:theList[i+1] = obj<< make into data table;
Current Report() << Close Window
);
次に、ヒートマップスクリプトで名前空間を参照して、名前空間に保存されているプライマリテーブル参照またはデータテーブル参照を取得できます。
Names Default To Here( 1 );
Clear Symbols();
dt = trans:thelist[1];
dt << Begin Data Update;
///////////////////////////////////
// Setting Variables for script ///
//rev_scale = "Reverse Scale";
rev_scale =0;
mean_median = 1; //mean=0, median=1
print(mean_median);
///////////////////////////////////
//gets all columns that are continous and stores that in a list as strings.
colList = dt << get column names( continuous, string );
print(colList);
// Create a temporary subset where the columns are the column list, selects all rows,
// invisible makes it so you don't see the datatable on screen since it is temporary
dtsub = dt << subset(columns(colList), selected rows(0),invisible);
// Move the data into a matrix this will be used later to get min, max, median|mean
allData = dtsub << get as matrix;
// Close the no longer needed temporary data table
close(dtsub, nosave);
// Calculate the statistics across the full data matrix
myMax = Maximum(allData);
myMin = Minimum(allData);
if(mean_median == 0,
myMid = Mean(allData),
myMid = Median(allData)
);
print(myMax);
print(myMin);
print(myMid);
print(colList);
// Run for loop over data table with the min, max and median|mean calculated from above
// gradient color scheme needs to be set.
if(rev_scale == 1,
For( i = 1, i <= N Items( colList ), i++,
Eval(
Substitute(
Expr(
Column( __col__ ) <<
set property(
"color gradient",
{"Green Yellow Red",
Range( {__Max__, __Min__, __Mid__} ),"Reverse Scale"}
) << Color Cell by Value( 1 );
),
Expr( __col__ ), colList[i],
Expr( __Max__ ), myMax,
Expr( __Min__ ), myMin,
Expr( __Mid__ ), myMid
)
);
);
,
For( i = 1, i <= N Items( colList ), i++,
Eval(
Substitute(
Expr(
Column( __col__ ) <<
//Column( colList[i] ) <<
set property(
"color gradient",
{"Green Yellow Red",
Range( {__Max__, __Min__, __Mid__} )}
) << Color Cell by Value( 1 );
),
Expr( __col__ ), colList[i],
Expr( __Max__ ), myMax,
Expr( __Min__ ), myMin,
Expr( __Mid__ ), myMid
)
);
);
);
入力ありがとうございます!
指定した更新されたextract_colsスクリプトを実行すると、L値アクセスに関する次のエラーメッセージが表示されます...

私のエラー、変更
insert into(theList,dt);
に
insert into(trans:theList,dt);
theListは存在しません......しかしtrans:theListは存在します