数式のパラメータとして列を渡す方法やあ、
リストに変数として保存されている列に単純な数式を作成しようとしています。
なぜ JSL がこの式の実行を拒否するのか理解できません。
数式でパラメータを格納する文字列に変更すると、完全に機能します。
何か助けはありますか?
私が使用するコードは次のとおりです。
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: 数式のパラメータとして列を渡す方法我慢できずに最後のテイクを撮りました。 短くて甘くて効果があります。 使用エヴァリンサート変数を評価するには、 :名前()列を参照するには、 「\[ ]\」文字列内で二重引用符を許可し、最後に使用しますeval(解析())結果の文字列を実行します。
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、parse、Substitue などに慣れていないと読むのは困難です)。
2/ Jan が提案した解決策: 確かに、見た目は良くなります (eval、substituinto なども使用します)。 ちなみに完璧に動作します。
3/ Byron の解決策: Eval、substitute、expr も使用します...完璧に動作します
4/ pmroz の解決策は (見た目には) 最も単純ですが、取得した数式は依然として MyList を参照しており、MyList が表す必要がある列を参照していません...つまり、列「age」の値を変更すると、 " の場合、列 "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]) ) )
);
行を追加しない限り、これはうまく機能します。 次に、 eval や expr などが必要になります。
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]
)
);
);
);
私は文字列を使うのはあまり好きではありませんが、時にはやるべきことをやらなければなりません。