목록에서 열을 합산하는 동적 수식 열을 생성하는 데 필요한 JSL 코드안녕 모두,
이 질문은 게시물과 관련이 있습니다. 여기 다른 열 목록을 요약하기 위해 비동적 열을 멋지게 생성합니다.
내가 겪고있는 문제는 N 개의 다른 열 목록이 있고 동적 수식이있을 때 열을 요약하는 방법입니다 (JSL 사용).
내 데이터 테이블에 ColList라는 열 목록이 있고, ColList에 있는 N개의 항목을 간단히 합산하는 수식을 사용하여 새 열을 생성하려고 합니다. 내가 생각한 것은 다음과 같습니다.
Names Default to Here (1);
dt = Open("$Sample_Data/2D Gaussian Process Example.jmp");<BR />ColList = dt << Get Column Names;
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 코드가 필요합니다.안녕 @ms ,
귀하의 솔루션에 대해 대단히 감사합니다. 내가 작업하고 있는 내 데이터 테이블에서 잘 작동합니다. 내가 작업하는 많은 데이터 테이블이 다른 데이터 유형을 가지고 있다는 사실을 설명하기 위해 약간 수정해야 했기 때문에 숫자 연속 데이터만 고려하면 됩니다. 어쨌든 올바르게 작동하고 다변량 평균, std devs 및 X 상관 관계를 올바르게 채웁니다. 중요한 경우 JMP 16 EA를 사용하고 있습니다.
당신의 도움을 주셔서 감사합니다! 또한 상관 관계 행렬에 관한 원래 요청의 다른 스레드에 게시하여 사람이 코드를 통해 N 차원까지 확장할 수 있기를 바랍니다.
감사해요!,
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 ,
귀하의 스크립팅 방법이 도움이 되기를 바라는 관련 질문(따라서 다른 게시물이 아님)이 있습니다. 게시물과 관련이 있습니다. 여기 . 내가 지금 하려고 하는 것은 기본적으로 프로필의 시뮬레이터에 정보를 "공급"할 때 4x4 상관 행렬에서 임의의 NxN 행렬로 원래 게시물에 넣은 내용을 일반화하는 것입니다.
다른 원래 게시물에는 NxN 상관관계 행렬을 생성할 수 있는 스크립트가 있으며 입력에서 "예측" 열(다른 N 열의 합계)을 생성할 수 있습니다. 내가 힘든 시간을 보내고 있는 부분은 다음과 같습니다. Simulator() 함수를 호출할 때 다음을 전달해야 합니다.
Simulator(state=0|1, , )
따라서 다른 원래 게시물에서 올바른 요소 목록("tpListY") 및 상관 행렬("corr.mat")을 전달하는 솔루션, Eval Insert()가 보낼 호출을 감싸는 데 필요한 JSL 코드 Simulator()를 Profiler에 보고한 다음 Eval(Parse())를 실행합니다.
이제 문제는 Simulator()를 호출하고 요인을 정의할 때 해당 ColList에서 이 작업을 수행할 수 있도록 이를 올바르게 일반화하는 방법입니다.
CollList는 다음과 같을 수 있습니다. 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의 평균 및 표준편차를 포함하는 벡터입니다.
각 열과 해당 평균을 명시적으로 작성할 필요 없이 여러 열을 처리할 수 있도록 더 자동화하고 싶습니다.
이에 대한 좋은 방법은 무엇입니까?
또한 X 상관 관계 항목에 실제로 상관 행렬 값을 입력하는 Eval(corr_mat)에 문제가 있습니다.
첨부된 데이터 테이블과 스크립트는 내가 시도하는 것을 이해하는 데 도움이 될 것입니다.
감사해요!,
DS
업데이트, 죄송합니다. 잘못된 파일을 추가했습니다. 이제 올바른 데이터 테이블이 있습니다.
Re: 목록에서 열을 합산하는 동적 수식 열을 생성하는 데 JSL 코드가 필요합니다.안녕 @ms ,
완벽한 솔루션입니다. 감사합니다! 나는 그것이 얼마나 단순하고 우아한지 좋아합니다.
목록이 {"A", "B", "C", ...}와 같이 구조화되어 있을 때 여전히 문제가 있기 때문에 코드를 약간 변경해야 했습니다. 그러나 목록이 {A, B, C, ...}와 같이 구조화되어 있으면 표현식을 잘 평가합니다. 두 목록은 약간 다르게 생성되며 따옴표는 실제로 Eval()을 해제합니다.
감사해요!,
DS
Re: 목록에서 열을 합산하는 동적 수식 열을 생성하는 데 JSL 코드가 필요합니다.이를 수행하는 방법에는 여러 가지가 있습니다. EvalExpr()을 사용하여 원하는 표현에 대한 변수를 생성한 다음 NameExpr()을 사용하여 (평가되지 않은) 표현을 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 ) ) );