목록의 열을 합산하는 동적 수식 열을 생성하는 데 필요한 JSL 코드안녕하세요,
이 질문은 게시물과 관련이 있습니다. 여기 다른 열 목록을 요약하기 위해 비 동적 열을 멋지게 생성합니다.
내가 가진 문제는 N 개의 다른 열 목록이 있고 동적 수식이 될 때 열을 합산하는 방법 (JSL 사용)입니다.
내 데이터 테이블에 ColList와 같은 열 목록이 있고 ColList의 N 항목을 합산하는 수식을 사용하여 새 열을 생성하려고합니다. 내가 생각한 것은 다음과 같습니다.
Names Default to Here (1);
dt = Current Data Table();
dt << New Column("Sum", Formula(Sum(ColList)));ColList는 ColList = { "col1", "col2", ..., "colN"}과 같은 열 목록이기 때문에 이것은 분명히 작동하지 않습니다. 문자열을 만들고 다음과 같이 Eval (Parse ()) 및 Eval Insert ()를 사용하려고했습니다.
Names Default to Here (1);
dt = Current Data Table();
str = Eval Insert("dt << New Column(\!"Sum\!", Formula(Sum(Eval(ColList))));
Eval(Parse(str));그러나 여전히 운이 없습니다. JSL 코드는 수식이있는 열을 생성하지만 실제 수식이 아닌 수식에 여전히 Eval (ColList)을 표시하기 때문에 빈 행 값을 갖게됩니다. Sum (: col1, : col2, : col3, ..., : colN).
열 목록 { ""}에서 콜론이있는 열 참조로 이동하는 데 내가 뭘 잘못하고 있는지 알아낼 수 없습니다.
어떤 도움이라도 대단히 감사합니다.
감사!,
DS
해석학데이터 테이블스크립팅Re : 목록에서 열을 합산하는 동적 수식 열을 생성하는 데 필요한 JSL 코드이를 수행하는 방법에는 여러 가지가 있습니다. EvalExpr ()을 사용하여 원하는 식에 대한 변수를 만든 다음 NameExpr ()을 사용하여 (평가되지 않은) expession을 Formula () 인수로 전송하는 것을 선호합니다.
Names Default To Here( 1 );
dt = Open( "$Sample_Data/2D Gaussian Process Example.jmp" );
ColList = dt << Get Column Names;
F = Eval Expr( Sum( Expr( ColList ) ) );
dt << New Column( "Sum", Formula( Name Expr( F ) ) );
Re : 목록에서 열을 합산하는 동적 수식 열을 생성하는 데 필요한 JSL 코드안녕 @ms ,
완벽한 솔루션입니다. 감사합니다! 나는 그것이 얼마나 단순하고 우아한 지 좋아합니다.
목록이 { "A", "B", "C", ...}와 같이 구조화되어있을 때도 여전히 문제가 있기 때문에 코드를 약간 변경해야했습니다. 그러나 목록이 {A, B, C, ...}와 같은 구조이면 표현식이 잘 평가됩니다. 두 목록은 약간 다르게 생성되며 따옴표는 실제로 Eval ()을 제거합니다.
감사!,
DS
Re : 목록에서 열을 합산하는 동적 수식 열을 생성하는 데 필요한 JSL 코드안녕하세요 @ms ,
스크립팅 방법이 도움이되기를 바라는 관련 질문이 있습니다 (따라서 다른 게시물이 아님). 그것은 포스트와 관련이 있습니다 여기 . 지금 제가하려는 것은 기본적으로 프로필의 시뮬레이터에 정보를 "공급"할 때 4x4 상관 행렬에서 임의의 NxN 행렬로 원래 게시물에 넣은 내용을 일반화하는 것입니다.
다른 원본 게시물에서 NxN 상관 행렬을 생성 할 수있는 스크립트가 있으며 입력에서 "예측"열 (다른 N 열의 합계)을 생성 할 수 있습니다. 내가 어려운 부분은 다음과 같습니다. Simulator () 함수를 호출 할 때 다음과 같이 전달해야합니다.
Simulator (state = 0 | 1, , )
따라서 다른 원본 게시물에서 올바른 요인 목록 ( "tpListY") 및 상관 행렬 ( "corr.mat")을 전달하는 솔루션에서 JSL 코드는 Eval Insert ()를 보낼 호출을 감싸 야했습니다. Profiler 보고서에 Simulator ()를 추가 한 다음 그 주위에 Eval (Parse ())을 실행합니다.
이제 문제는 Simulator ()를 호출하고 요인을 정의 할 때 해당 ColList에서이를 수행 할 수 있도록이를 올바르게 일반화하는 방법입니다.
ColList는 다음과 같을 수 있습니다. ColList = {A, B, C, D, ...} 그리고 각 열 A, B, C, ...에 대한 관련 평균 및 표준 편차가 있습니다.
시뮬레이터를 호출하여 각 요인에 대해 올바른 평균과 표준 편차를 삽입하기위한 올바른 구문은 무엇입니까? 예:
sim_design = Profiler(Y(:Pred), Invisible);
new = Eval Insert(
"sim_design << Simulator(
1,
Factors(
:A << mutlivariate(Mmean[1], MSD[1])),
:B << mutlivariate(Mmean[2], MSD[2])),
:C << mutlivariate(Mmean[3], MSD[3])), //etc. for the N columns in the made up table.
),
X Correlations(
1,
Eval(ColList),
Eval(corr_mat)
),
NRuns(1e6)
);");
Eval(Parse(new));원래 데이터 테이블에서 상관 행렬 (corr_mat)을 생성하는 데 사용 된 열 수 (N)로 두 번째 모형이 만들어집니다. 모의 테이블은 열을 합산하여 프로파일 러에 보낼 더미 함수로 사용되는 : Pred 열을 만드는 것입니다. 변수 Mmean 및 MSD는 N 열 A의 평균 및 표준 편차를 포함하는 벡터입니다.
각 열과 그에 상응하는 평균을 명시 적으로 작성할 필요없이, 더 많은 열을 처리 할 수 있도록 더 자동화하고 싶습니다.
이것에 대해 좋은 방법은 무엇입니까?
또한 Eval (corr_mat)이 실제로 X Correlations 항목에 상관 행렬의 값을 입력하는 데 문제가 있습니다.
첨부 된 데이터 테이블과 스크립트는 내가 시도하는 것을 이해하는 데 도움이 될 것입니다.
감사!,
DS
업데이트, 죄송합니다 잘못된 파일을 추가했습니다. 이제 올바른 데이터 테이블이 있습니다.
Re : 목록에서 열을 합산하는 동적 수식 열을 생성하는 데 필요한 JSL 코드여기에 한 가지 접근 방식이 있습니다. 먼저 Factors ()를 반복적으로 빌드 한 다음 두 번째 단계에서 X Correlations ()에 대한 평가 된 인수를 포함하는 완전한 Simulator () 표현식을 만듭니다.
// Iteratively build the Factors expression
fs = Expr( Factors() );
For( i = 1, i <= N Items( ColList ), i++,
Insert Into(
fs,
Eval Expr( Expr( collist[i] ) << multivariate( Expr( MMean[i] ), Expr( MSD[i] ) ) )
)
);
// Make the complete Simulator expression
sim = Eval Expr(
sim_design << Simulator(
1,
Expr( Name Expr( fs ) ),
X Correlations( 1, Expr( ColList ), Expr( corr_mat ) ),
N Runs( 1e4 )
)
);
// Name Expr( sim ) // Run this line to show the expression in the log
// Launch Profiler and run the Simulator expression
sim_design = Profiler( Y( :Pred ) );
sim;
그러나 X 상관 행렬 (대부분의 경우)은 무시되는 것처럼 보입니다. 보고서에는 0 만 표시됩니다.
또한 프로파일 러에 수동으로 상관 관계를 입력하고 스크립트를 저장 및 실행하면 상관 관계가 손실됩니다. 저장된 스크립트에 보존되어 있어도. 이유를 모르겠습니다.
Re : 목록에서 열을 합산하는 동적 수식 열을 생성하는 데 필요한 JSL 코드안녕하세요 @ms ,
귀하의 솔루션에 대단히 감사합니다. 작업중인 데이터 테이블에서 잘 작동합니다. 내가 작업하는 많은 데이터 테이블이 다른 데이터 유형을 가지고 있다는 사실을 설명하기 위해 약간 수정해야했기 때문에 숫자 연속 데이터 만 고려하면됩니다. 어쨌든 올바르게 작동하고 다변량 평균, 표준 개발 및 X 상관 관계를 올바르게 채 웁니다. 중요한 경우 JMP 16 EA를 사용하고 있습니다.
당신의 도움을 주셔서 감사합니다! 나는 또한 상관 행렬에 관한 원래 요청의 다른 스레드에 게시하여 사람이 코드에서 N 차원까지 확장 할 수 있기를 바랍니다.
감사!,
DS