列変数に関するヘルプこんにちは、みんな、
次のコードが失敗する理由を理解できません。
// This code doesn't work
dt = Current Data Table();
selectedCol = dt << Get Selected Columns();
If( Col Mean( selectedCol[1] ) < Col Mean( selectedCol[2] ),
begin = selectedCol[1];
end = selectedCol[2];
,
begin = selectedCol[2];
end = selectedCol[1];
);
列全体をbegin / end変数に再割り当てしたいのですが、そうではありません。私はこれを試しました:
// This code still doesn't work
dt = Current Data Table();
selectedCol = dt << Get Selected Columns();
If( Col Mean( As Column( selectedCol[1] ) ) < Col Mean( As Column( selectedCol[2] ) ),
begin = As Column( selectedCol[1] );
end = As Column( selectedCol[2] );
,
begin = As Column( selectedCol[2] );
end = As Column( selectedCol[1] );
);
概念的にも実用的にも役立ちますか。 これは本当に簡単に思えますが、私は明らかに重要な何かが足りないのです。
ジョン
再:列変数のヘルプありがとう、ジュリアンありがとう!
それは信じられないほど役に立ちます!!!!
ジョン
再:列変数のヘルプこんにちは @john_madden 、
ここで気づく2つのこと。まず、JSLは内部から入れ子関数を評価します。つまり、リストの一部である列への参照にはEval()が必要です。次に、正しく理解しているのであれば、すべての列の値をbeginとendに割り当てます。もしそうなら、あなたはそれらの値を返すために列にメッセージを送る必要があります:<< Get Values。以下がうまくいくはずです(それがあなたの意図だと仮定して!)
dt = Current Data Table();
selectedCol = dt << Get Selected Columns();
If( Col Mean( eval(selectedCol[1]) ) < Col Mean( eval(selectedCol[2]) ),
begin = selectedCol[1] << Get Values;
end = selectedCol[2] << Get Values;
,
begin = selectedCol[2] << Get Values;
end = selectedCol[1] << Get Values;
);
これが役に立つことを願っています!
@julian
編集:私は誰かがネストされた関数について私の見解を見ることができるかを見ることができ、「待つ、Col Mean(selectedCol [1])」はネストされた関数ではありません。実際、購読は関数です。角かっこを使用すると便利です。あなたが書いたかもしれません:
Col Mean( Subscript(selectedCol,1) )
この場合、関数のネストは明らかです。JMPがこのコードを評価しようとしたときに起こることは、Col Mean()が最初に評価され、その関数が操作するために列を必要とすることです。それはSubscript()関数にぶつかり、それをどうするかわからない。そのため、Eval()でSubscript()をラップすることで、Col Mean()を評価する前に、まず(列への参照を返す)添え字を処理するようにJMPに指示します。
Col Mean( Eval( Subscript( selectedCol,1 ) ) )
追加の説明が役立つことを願っています!