상호 작용 효과에 대한 Char ()나는 이것이 전에 물어 보지 않았다고 믿고 힘든 시간을 보내고 잘못된 키워드를 검색해야합니다.
배경 : 사용자가 Fit Model을 실행하고 관심있는 결과를 스크립트로 데이터 테이블에 저장했다고 가정합니다. 저장된 스크립트에서 Effects () 인수를 추출하기 위해 JSL을 작성했습니다. 효과가 있다고 가정 해 봅시다 (: A, : B :, : A * :
.
나는이 결과를 얻는 JSL을 이미 작성했다. (모델의 효과 목록에서 Transform Column ()을 사용하지 않는 한 완전히 새로운 웜을 만들 수있다.)
testList = {:A, :B, :A*:B};현재 작업 : 사용자가이 세 가지 효과 중 하나를 선택할 수 있도록 JSL을 작성하고 싶습니다.
현재 상태 : 지금까지 내가 한 것은 이것입니다.
win = New Window( "Test", Panel Box( "Choose an Effect", Radio Box( testList ) ) );
이것을 실행하면 "A", "B"및 "Multiply"효과가있는 라디오 박스가 나타납니다. 분명히 디스플레이 박스는 단순히 "A * B"를 표시하기보다는 세 번째 효과에서 Head ()를 당기기로 선택합니다.
가능한 해결책 : 나는 Head (testList [i]) == "Multiply ()"를 체크하기위한 루프를 작성하여 이것을 고칠 수 있다고 생각하고, 그렇다면 Arg (testList [i], j), 이들을 문자로 변환하여 다른 목록에 넣고 Concat Items ()에 구분 기호 "*"를 붙입니다.
질문 : "A", "B"및 "A * B"효과가있는 라디오 상자를 제공하는보다 직접적인 경로가 있습니까?
다시 : Char () 상호 작용 효과에여기에 내가 생각해내는 것이있다. 필자는 모델 적합성이 Standard Least Squares에서 작동하지 않는 메시지를 포함할지 모르기 때문에 Personality를 대체하기보다는 Barebones Standard Least Squares를 만들기로 결정했습니다.
script = (Current Data Table() << Get Property("Fit Model"));
scriptAsStandardLeastSquares = Expr(Fit Model());
nFitModelArgs = N Arg( script );
For( k = 1, k <= nFitModelArgs, k++,
headString = Char( Head( Arg( script, k ) ) );
If(
headString == "Y" | headString == "Effects", Insert Into(scriptAsStandardLeastSquares, Arg(script, k))
);
);
Insert Into(scriptAsStandardLeastSquares, Expr(Run()));
Insert Into(scriptAsStandardLeastSquares, Expr(Personality("Standard Least Squares")));
Insert Into(scriptAsStandardLeastSquares, Expr(invisible));
fm = Eval(scriptAsStandardLeastSquares);
effectList = (fm << Get Effect Names);
fm << Close Window;다시 : Char () 상호 작용 효과에이것은 내가 사용하는 코드의 일종입니다 :
// s = model script
// easier to manipulate strings
str = Char(NameExpr(s));
// ensure there is a variable to store a reference to the model object
str = "mwin=" || str;<BR /><BR /><BR />// run in the background
SubstituteInto(str,"Fit Model(","Fit Model(Invisible,");
// change emphasis (could also change personality)
pattern = "Emphasis(" + PatArb() + ")" + PatRem();
replace = "Emphasis( Minimal Report ), Run)";
Pat Match(strScript, pattern, replace);
// execute and retrieve results
Eval(Parse(str));
effects = mwin << Get Effect Names;다시 : Char () 상호 작용 효과에아니, 작동하지 않습니다. 컬럼 이름에 의도적으로 콜론을 사용하는 과학자가 있다고 가정합니다 (아마도 비율을 나타 내기 위해). 그렇다면 JSL은 @txnelson 다음과 같이 보일 수 있습니다.
testList = {:Name("A:total"), :Name("B:total"), :Name("A:total") * :Name("B:total")};
newtestlist = testList;
For( i = 1, i <= N Items( testlist ), i++,
newtestlist[i] = Substitute(Char( testlist[i] ), ":", "")
);
win = New Window( "Test", Panel Box( "Choose an Effect", Radio Box( newtestList ) ) );그런 다음 라디오 상자에 Atotal, Btotal 및 실제로보기 흉한 이름 ( "Atotal") * 이름 ( "Btotal")이 표시됩니다.
아니요, 효과를 가져올 수있는 한 효과 이름 가져 오기 메시지를 선호한다고 생각합니다. 나는 데이터 테이블에 저장된 스크립트를 다시 작성하여 표준 최소 자승을 유도하기 위해 이름을 얻을 수 있다고 생각합니다.
다시 : Char () 상호 작용 효과에그들이 "chared"되면 S를 할 수 있습니다. ubstituteInto 콜론을 제거하는 방법
다시 : Char () 상호 작용 효과에어쩌면 표준 모델을 강제 실행하고 모델을 실행하여 효과 이름을 표시 할 수있을 정도로 모델 모델 스크립트를 다시 작성할 수도 있습니다.
다시 : Char () 상호 작용 효과에이것은 실제로 내 응용 프로그램에 대해 매우 유망하지만 Fit Least Squares 특성에서만 작동합니다. 불행히도, 나는 Fit Least Squares에서 일할 것이지만, Fit Mixed and Generalized Regression과 함께 일할 무언가가 필요하다.
다시 : Char () 상호 작용 효과에이것은 작동하지만 콜론을 뒤에 남겨 둡니다. 또한 열 이름에 JMP가 Name () 함수에서 열 이름을 감싸도록하는 문자가 포함되어 있으면이 작업은 실제로보기 흉하게됩니다.
다시 : Char () 상호 작용 효과에나는이 문제를 과거에 다음과 같은 방식으로 해결했다.
testList = {:A, :B, :A * :B};
newtestlist = testList;
For( i = 1, i <= N Items( testlist ), i++,
newtestlist[i] = Char( testlist[i] )
);
win = New Window( "Test", Panel Box( "Choose an Effect", Radio Box( newtestList ) ) );다시 : Char () 상호 작용 효과에때때로 간접 루트가 더 쉬울 수도 있습니다. 스크립트를 가지고 있기 때문에 배경에서 실행하여 적합 모델 객체에 효과 이름 가져 오기를 보내면 라디오 버튼에 사용할 수있는 목록이 생깁니다.