수식에서 열을 매개변수로 전달하는 방법안녕,
목록에 변수로 저장된 열에 간단한 수식을 만들려고 합니다.
JSL이 공식 수행을 거부하는 이유를 이해할 수 없습니다.
수식에서 매개 변수가 저장하는 hte 문자열로 변경하면 완벽하게 작동합니다.
어떤 도움 ??
내가 사용하는 코드는 다음과 같습니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
for(j=1, j <= N items(MyList), j++,
dt << New Column( ParamPlot[j], Formula( 2* ParamPlot[j]) );
);
나는 Eval, Eval expr,...와 같은 것을 시도했지만 지금은 
Re: 수식에서 열을 매개변수로 전달하는 방법짧고 효율적입니다 
정말 감사합니다 
Re: 수식에서 열을 매개변수로 전달하는 방법나는 마지막 테이크를 참을 수 없었다. 짧고 달콤하며 작동합니다. 사용 평가 변수를 평가하기 위해 :이름() 열을 참조하려면 "\[ ]\" 문자열 내에서 큰 따옴표를 허용하고 마지막으로 평가(구문 분석()) 결과 문자열을 실행합니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
For( j = 1, j <= N Items( MyList ), j++,
new_col_expr = evalinsert("\[dt << New Column("^paramplot[j]^", Formula(2 * :name("^mylist[j]^")))]\");
eval(parse(new_col_expr));
);Re: 수식에서 열을 매개변수로 전달하는 방법먼저 답변 주신 모든 분들께 감사드립니다...
제안된 모든 솔루션에 대한 제 견해는 다음과 같습니다.
1/ Mark가 제안한 솔루션: 완벽하게 작동합니다(Eval, 구문 분석, 대체 등에 사용하지 않으면 읽기 어렵지만...).
2/ Jan이 제안한 솔루션: 실제로 눈에 더 좋습니다(eval, replacementinto 등도 사용). 그건 그렇고 완벽하게 작동합니다.
3/ Byron의 솔루션: 평가, 대체, expr도 사용합니다...완벽하게 작동합니다.
4/ pmroz의 솔루션은 (눈에) 가장 단순하지만 우리가 얻는 수식은 여전히 MyList를 참조하고 표시해야 하는 열은 참조하지 않습니다. " , "age2" 열은 업데이트되지 않습니다.
제안해 주셔서 감사합니다 
Re: 수식에서 열을 매개변수로 전달하는 방법Byron이 말했듯이 자체적으로 2배인 새 열을 만들려고 합니다. 나는 이것이 당신이 원하는 것이라고 생각합니다. AS COLUMN이 트릭을 수행했습니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
For( j = 1, j <= N Items( MyList ), j++,
dt << New Column( ParamPlot[j], Formula( 2 * as column(dt, MyList[j]) ) )
);
이것은 행을 추가하지 않는 한 훌륭하게 작동합니다. 그런 다음 evals, exprs 등이 필요합니다.
Re: 수식에서 열을 매개변수로 전달하는 방법자기 자신을 2로 곱하는 수식을 만들려고 하는 것 같습니다. 이것은 작동하지 않으며 빈 값을 반환해야 합니다.
또한 "j"는 행렬을 만드는 함수이므로(JSL 편집기에서는 파란색으로 표시됨) 예기치 않은 방식으로 해석될 수 있는 경우를 대비하여 일반적으로 "j"를 변수로 사용하지 않습니다.
열 이름과 참조로 작업하는 것은 상당히 실망스러울 수 있습니다. 이 전략을 살펴보십시오.
루프 내에서 먼저 열이 생성되고 생성될 때 참조로 사용할 핸들 "newcol"이 제공됩니다. 다음으로 큰 eval(substitute)) 절이 있습니다. 이 인수 내에서 "col<
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
For( i = 1, i <= N Items( MyList ), i++,
newcol=dt << New Column( ParamPlot[i] );
Eval(
Substitute(
Expr(
newcol << set formula( a * 2 ) ) ,
Expr( a ), As Name( mylist[i] )
);
));Re: 수식에서 열을 매개변수로 전달하는 방법아마도 이것은 약간 더 나을 것입니다(일부 사람들의 눈에는):
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
For( j = 1, j <= N Items( MyList ), j++,
CMD = Expr(dt << New Column( NameTBD, Formula( 2 * colTBD) ));
SubstituteInto(CMD, Expr(NameTBD), ParamPlot[j], Expr(ColTBD), Parse(":"||MyList[j]));
CMD;
);
Re: 수식에서 열을 매개변수로 전달하는 방법문제는 Formula()에 대한 인수가 리터럴 표현식으로 취급된다는 것입니다. ParamPlot[j]를 평가하지 않고 결과를 대체하여 원하는 수식을 만듭니다. 표현식을 사용할 수 있어야 하는 것 같지만 그 접근 방식으로는 어디에도 없습니다. 대신 문자열을 기반으로 한 솔루션이 있습니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
For( j = 1, j <= N Items( MyList ), j++,
Eval(
Parse(
Substitute("dt << New Column( \!"nnn\!", Formula( 2 * :ppp ) )",
"nnn",
ParamPlot[j],
"ppp",
MyList[j]
)
);
);
);
저는 문자열을 사용하는 것을 정말 좋아하지 않지만 가끔은 해야 할 일을 해야 합니다.