안녕하세요,
다음 스크립트를 사용하고 있습니다. 게시하다 스크립트에서 생성된 히트맵을 시도하고 확장합니다. 현재 형식의 스크립트는 모든 열에 대한 히트맵을 함께 수행하지만 별도의 히트맵 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 쿼리 빌더를 사용하여 열 연결을 수행하는 것입니다.
당신은 지정하고 있습니다
Names Default To Here( 1 );
특정 스크립트에 대해 별도의 메모리 네임스페이스를 생성합니다.즉, extract_cols 스크립트에 "fruit"라는 목록이 있습니다.히트맵 스크립트에서 지정한 경우
myFruit = fruit[1];
히트맵 스크립트는 과일이라는 변수에 대해 아무것도 알지 못합니다.
히트맵 스크립트에서 변수 "dt"를 현재 데이터 테이블과 동일하게 설정합니다.설명에 따르면 extract_cols 스크립트를 실행한 직후 헤드맵 스크립트를 실행하고 있습니다.JMP에는 주어진 시간에 현재 활성 데이터 테이블인 데이터 테이블이 하나만 있습니다.따라서 지정할 때
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
)
);
);
);
입력해 주셔서 감사합니다!
귀하가 제공한 업데이트된 extract_cols 스크립트를 실행하면 아래에 L-값 액세스에 대한 다음 오류 메시지가 표시됩니다...

내 오류, 변경
insert into(theList,dt);
...에
insert into(trans:theList,dt);
목록이 존재하지 않습니다.... 하지만 trans:List는 존재합니다.