안녕,
다음의 스크립트를 사용하고 있습니다. 우편 스크립트에서 생성된 히트맵을 시도하고 확장합니다. 현재 양식의 스크립트는 모든 열에 대한 히트맵을 함께 수행하지만 별도의 히트맵 PER 열을 원합니다. 즉, 특정 열에 대한 최소, 중간 및 최대 값을 찾은 다음 해당 열에만 히트 맵을 적용한 다음 다음 열에 대해 동일한 작업을 수행하고 계속하고 싶습니다.
첨부된 내용은 다음과 같습니다
1. sample_base_table.jmp: 추출되는 샘플 데이터 세트입니다.
2. extract_cols.jsl: 히트맵 스크립트에 사용할 데이터를 요약한 스크립트입니다.
3. heatmap.jsl: 이 스크립트는 지정된 열에 대한 히트맵을 수행합니다.
문제:
extract_cols.jsl을 실행하면 "Untitled X"라는 4개의 새 데이터 테이블이 생성됩니다. 그런 다음 heatmap.jsl을 실행하면 마지막으로 생성된 Untitled X 테이블에 대한 히트 맵만 생성할 수 있습니다. 왜 이러는지 이해가 안되네요... 디버거 코드를 보면 "'열' 액세스 또는 평가에서 열을 찾을 수 없습니다"라고 표시됩니다. 그러나 "Median(Values, Mango)"로 사용되는 열을 인쇄하고 표시되므로 무슨 일이 일어나고 있는지 확실하지 않습니다(아래 출력 그림 참조).

개선/향후 작업:
이상적으로는 생성된 마지막 데이터 테이블만 업데이트되는 이유를 파악한 후 과일의 4개 히트맵 열을 모두 국가 및 과일 정보도 포함된 하나의 데이터 테이블에 연결하고 싶습니다. 즉, 4(32x3) 테이블을 생성하고 1(6x32) 테이블(4 과일 히트맵 + 국가 열 + 위치 열)을 생성하고 싶습니다. 현재 제가 하고 있는 방법은 JMP Query Builder를 사용하여 열 연결을 수행하는 것입니다.
trans:theList 위로 마우스를 가져가거나 다음을 지정하는 경우
show(trans:theList);
스크립트에서 목록에 무엇이 있는지 보여줍니다.5개의 항목이 표시됩니다.첫 번째는
Data Table( 'the name of your initial data table");
그 이후의 각 항목은 Apple, Banana, Mango, 마지막으로 Orange에 의한 데이터 테이블 필터에 대한 포인터가 됩니다.
데이터를 포함하지 않고 데이터에 대한 포인터만 포함합니다.열 이름 등은 실제 데이터 테이블에서 검색됩니다.
도움말 풀다운 메뉴 아래에 있는 JMP 설명서 라이브러리에서 제공되는 스크립팅 가이드를 읽어야 합니다.
덕분에 해결했습니다!
따라서 히트맵 스크립트를 실행하면 아래 메시지가 표시됩니다. 내가 변할 때
dt= trans:thelist[5]
작동하지만 마지막으로 생성된 데이터 테이블에 대해서만 다시 작동합니다. 또한 이 네임스페이스 개념은 나에게 새로운 것입니다. 이것이 무엇을 하는지 요약해 보겠습니다. 제 이해가 정확한지 확인할 수 있습니까? 따라서 스크립트에서 네임스페이스를 사용하여 모든 데이터 테이블 이름(더 중요한 것은 해당 데이터 테이블의 열 이름과 값)을 목록 트랜스에 저장할 수 있으며 히트맵 스크립트에서 호출합니다.

내 실수, 변경
insert into(theList,dt);
에게
insert into(trans:theList,dt);
theList는 존재하지 않지만... trans:theList는 존재합니다.
입력해 주셔서 감사합니다!
귀하가 제공한 업데이트된 extract_cols 스크립트를 실행하면 L-값 액세스에 대한 다음 오류 메시지가 표시됩니다...

당신은 지정하고 있습니다
Names Default To Here( 1 );
특정 스크립트에 대해 별도의 메모리 네임스페이스를 생성합니다.즉, extract_cols 스크립트에 "fruit"라는 목록이 있습니다.히트맵 스크립트에서 지정한 경우
myFruit = fruit[1];
히트맵 스크립트는 fruit라는 변수에 대해 아무것도 알지 못합니다.
히트맵 스크립트에서 변수 "dt"를 현재 데이터 테이블과 동일하게 설정합니다.귀하의 설명에서 extract_cols 스크립트를 실행한 직후 헤드맵 스크립트를 실행하고 있습니다.JMP에서는 언제든지 현재 활성 데이터 테이블인 데이터 테이블이 1개만 있습니다.따라서 지정할 때
dt = Current Data Table();
히트맵 스크립트는 extract_cols 스크립트에서 생성한 마지막 데이터 테이블인 현재 활성 데이터 테이블을 가져옵니다.
원래 데이터 테이블 참조를 두 번째 스크립트에 전달하고 가능한 다른 4개의 데이터 테이블 참조를 전달해야 하는 경우 이를 수행하는 한 가지 방법은 별도의 네임스페이스를 만들고 해당 네임스페이스에 참조를 배치하는 것입니다.다음은 스크립트를 수정하여 네임스페이스를 생성하고 데이터 테이블 참조를 여기에 배치하는 것입니다.
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
)
);
);
);