数式で使用されている列を抽出する方法はありますか?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />みんなこんにちは-
段階的な分析から選択した列を抽出し、各選択の単変量分布を構築する新しいボタンをプラットフォームに作成しようとしています。 制限は、選択された列の抽出とディストリビューションの構築がリスト内の特定の列名に限定されることです。 列に飛び込んで式かどうかを確認し、式である場合は使用されている列を抽出し、方向を変えて追加の列を段階的に選択した列のリストに含めることができるようにしたいと考えています。
具体的には、数式から列を抽出できますか? 「:」部分を使用しても複雑な名前を取得できるようには見えず、インデックスは数式全体を取得することのみを参照します。
例としては、リストに「ボリューム」列を含めることです。
{:音量}
column("ボリューム")<<数式を取得; を実行しています。戻り値:
:高さ * :幅 * :長さ
以下のリストで終わりたいと思います。
{:高さ、:幅、:長さ、:体積}
これは単純な数式の例であり、単純な名前または複雑な名前を持つ他のバージョン/タイプが存在する可能性があります...
ありがとう、
アンドリュー・パーカー
Re: 数式で使用されている列を抽出する方法はありますか?これは上記の Craige@JMP エントリの適切な言い換えだと思います、Andrew。
ただし、直前の例では、リスト内の個別の項目のみを保持する必要があることが示されていることに注意してください (したがって、「W」は 1 回だけ出現します)。 このロジックを Craige の関数に組み込むことも、関数が返すリストを単に操作することもできます。
Re: 数式で使用されている列を抽出する方法はありますか?ありがとう! これは間違いなく、プログラムを完了するために必要なもののようです。
数式の理解を確認するには、数式ビルダーを使用して何が起こっているかを視覚化するとします。

メインボックスを見て、「式は何ですか?」と尋ねます。 「何個必要ですか?」各部分を調べて、葉だけが入ったボックスに到達するまで質問を繰り返し、葉が列名である文字列を返します。 最小のリーフ ボックスに到達すると、元に戻り、最初のリーフ ボックスへのパス上でチェックしていなかったノード/リーフを調べ始めます...
とても雄弁な説明ではありませんが、そう思われますか?
Re: 数式で使用されている列を抽出する方法はありますか?素敵なコードです! どうもありがとう。
Re: 数式で使用されている列を抽出する方法はありますか?Ian - 再帰的バージョンここ
Re: 数式で使用されている列を抽出する方法はありますか?これを行う最良の方法は、式を再帰的にトークン化してツリーにし、列参照のリーフ ノードをスキャンすることです。 これは、提供されている式操作プリミティブを使用する JSL で完全に可能です (「Head()」、「NArg()」、および「Arg()」関数に注意して、『JMP スクリプト ガイド』の「リストと式」セクションを参照してください) )。 ただし、このメソッドをコード化するには、コンピューター サイエンスの本を読み出す必要があるかもしれません。
あるいは、以下のコードは、(プロファイラーを使用して) JMP に作業を実行させるための巧妙な方法を提供します。
名前デフォルトここへ( 1 ) ;
dt =新しいテーブル( 「数式の列を取得」 、
行の追加( 20 ) 、
新しい列( 「は」 、
数値、
「連続」 、
フォーマット( "最高" 、 12 ) 、
式(ランダムユニフォーム() )
) 、
新しい列( 「わ」 、
数値、
「連続」 、
フォーマット( "最高" 、 12 ) 、
式(ランダムユニフォーム() )
) 、
新しい列( 「D」 、
数値、
「連続」 、
フォーマット( "最高" 、 12 ) 、
式(ランダムユニフォーム() )
) 、
新しい列( 「V」 、
数値、
「連続」 、
フォーマット( "最高" 、 12 ) 、
式( ( : W * : H * : D ) / 10 )
)
) ;
// プロファイラーを非表示で起動します
p = dt <<プロファイラー( Y ( : V ) 、拡大する、見えない) ;
// グリッドテーブルを取得する
p <<出力グリッドテーブル;
// グリッドテーブルの列をリストに取得します。
コル=データ表( NTテーブル()) << getColumnNames ( "弦" ) ;
// 掃除
p <<ウィンドウを閉じる;
近い(データ表( NTテーブル()) 、保存しない) ;