문제를 더 작은 부분으로 나눕니다. 다음과 같이 매우 간단한 것부터 시작하십시오(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에서 작동하지 않습니다. 오류 메시지는 "모든 행에 누락된 값이 있거나 제외되어 그룹별 열에 데이터가 없습니다.
가변성 차트 함수 호출을 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( 변환 열( yname, Formula( Column(colname) ) ) ),
- JMP 경고: 잘못된 인수(대화 상자)
- 모든 행에 누락된 값이 있거나 제외되어 그룹에 데이터가 없습니다(로그 창).
- Y( 변환 열( yname, Formula( Column(dt,colname) ) ) ),
- JMP 경고: 잘못된 인수(대화 상자)
- 모든 행에 누락된 값이 있거나 제외되어 그룹에 데이터가 없습니다(로그 창).
- Y( 변환 열( yname, Formula( Column( As Column(colname)) ) ) ),
- JMP 경고: 해결되지 않은 열 256회(대화 상자)
- "잘못된 인수 256회, 모든 행에 누락된 값이 있거나 제외되어 하나의 열 또는 그룹에 데이터가 없습니다(로그).
- Y( 변환 열( yname, Formula( Column( As Column(dt,colname)) ) ) ),
- JMP 경고: 범위가 지정된 데이터 테이블에 액세스하려면 데이터 테이블 열 또는 변수가 256번 필요합니다(대화 상자).
- 잘못된 인수 256회, 모든 행에 누락된 값이 있거나 제외되어 하나의 열 또는 그룹에 데이터가 없습니다(로그).
- Y( 변환 열( yname, Formula( As Column(colname) ) ) ),
- JMP 경고: 해결되지 않은 열 267회(대화 상자)
- (로그 오류 없음)
- Y( 변환 열( 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()의 조합으로 래핑하는 다양한 조합을 시도했습니다. 기능도 성공하지 못했습니다.
내가 여기서 뭘 잘못하고 있는지 볼 수 있는 사람이 있나요?
참고: 이 정확한 코드는 테스트되지 않았으며 var 이름은 일반화되었습니다.
//
// 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>