:folded_hands: 式のインデックス作成: 読み取りおよび書き込みアクセス☑ クールな新機能
☐ 多くのユーザーに役立つ可能性があります!
☐ 「バグ」を除去する
☐ あれば便利
☐ 誰もそれを必要としない
このウィッシュリストのリクエストのきっかけは何ですか?
編集: 最初の部分が「式のインデックス作成: 式ツリーを登るには?」に移動されました。
解決策を提供してくれた@jthiに感謝します:
経由式を抽出ユーザーは表現の一部を検索して抽出することができます。
この関数はパターン検索を提供し、最初の一致を返します。
ワイルドカードも可能
どのような改善を望みますか?
表示ツリー インデックスとデータ テーブル インデックスの組み合わせ (式のみ):
より正確な読み取りアクセス:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
myExpr=Expr(gb = dt << Graph Builder(
Size( 437, 413 ),
Graph Spacing( 4 ),
Variables( X( :height ), Y( :weight ), Y(:height), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
));
//instead of:
Arg(Arg(Arg(Arg(Arg(myExpr,2),2),3),3),1)
<BR />// I want to use:
myExpr[2][2]["Variables"]["Y"(2)][1]
//assign // send // Graph Builder // Variables<BR /><BR />// or like it's possible for Display Trees:<BR />myExpr["Variables"]["Y"(2)][1]
本当にすごいのは、データ テーブル インデックスを介して可能なものと同様の書き込みアクセスです。
myExpr["Variables"]["Y"(2)][1] = Expr(:height);
Substituteに似ていますが、次元が異なります。
[編集]
おそらく、Expression Indexing の最適な応用例はInsert Into です。例:
Insert Into ( myExpr["Variables"], Expr(Y(:age)))
このアイデアはなぜ重要なのでしょうか?
式インデックスの力により、JMPでの式処理が簡単になります:)
より多くの願いが提出されました
自動化とスクリプトRe: 式のインデックス作成: 読み取りおよび書き込みアクセス - ステータスが「確認済み」に変更されましたRe: 式のインデックス作成: 読み取りおよび書き込みアクセスJMP Expr() の奇妙さ、誰か説明できますか?
Insert Intoについては、現在のターボ モードの他に、追加の「非マージ」モードを提供してください。
ターボ モード (現在のInsert Into の動作):
挿入する式のヘッドがターゲット位置の上のレベルのヘッドと同じである場合、式は上位レベルと「マージ」されます。
Insert Into (List(a,b), List(c,d)) // {a,b,c,d}追加の非マージモード:
Insert Into (List(a,b), List(c,d), merge(0)) // {a,b,{c,d}}
式のインデックスを設定するのはかなりの労力がかかります。また、JMP ユーザーの大半はこれを使用しないため、希望が実現される見込みはほとんどありません。
挿入先の希望を切り出す: 挿入先: Flatten(0|1)
Re: 式のインデックス作成: 式ツリーを登るのを手伝ってください素晴らしい例をありがとう@Craige_Hales
他の人もこのアイデアを支持してくれることを願っています...
Re: 式のインデックス作成: 式ツリーを登るのを手伝ってくださいこれをどう変換しますか
myExpr = Expr(
gb = dt << Graph Builder(
Size(437, 413),
Graph Spacing(4),
Variables(X(:height), Y(:weight), Overlay(:sex)),
Elements(Points(X, Y, Legend(1)), Smoother(X, Y, Legend(2)))
)
);
これに?
myExpr = Expr(
gb = dt << Graph Builder(
Size(437, 413),
Graph Spacing(4),
Variables(X(:height), Y(:weight), /*added:*/ Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(1)), Smoother(X, Y, Legend(2)))
)
);
インデックスを付けると、かなり簡単になります。InsertInto( myExpr, ... ) の問題のようです。演算子をリストに変換して元に戻す方法がわかれば、これはうまくいきますが、次のようなものも考えられます。
InsertInto( myExpr[/* = */ 2][ /* << */ 2]["Variables"], /* insert position*/ 3, expr( Y(:height)))
式をその場で編集できます。
概念実証:
myExpr = Expr(
gb = dt << Graph Builder(
Size( 437, 413 ),
Graph Spacing( 4 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
)
);
Show( "Original", Name Expr( myExpr ) );
// convert operators to lists
Substitute Into( myExpr, Expr( Assign() ), {} );
Substitute Into( myExpr[2], Expr( Send() ), {} );
Substitute Into( myExpr[2][2], Expr( Graph Builder() ), {} );
Substitute Into( myExpr[2][2][3], Expr( Variables() ), {} );
// make the edit
Insert Into( myExpr[2][2][3], Expr( Y( :height ) ), 3 );
// reverse the earlier conversions
Substitute Into( myExpr[2][2][3], {}, Expr( Variables() ) );
Substitute Into( myExpr[2][2], {}, Expr( Graph Builder() ) );
Substitute Into( myExpr[2], {}, Expr( Send() ) );
Substitute Into( myExpr, {}, Expr( Assign() ) );
Show( "Edited", Name Expr( myExpr ) );
//
// wouldn't it be nice if we could use the edit line directly?
//
Write( "\!nTry without a list:" );
Insert Into( myExpr[2][2][3], Expr( Y( :height ) ), 3 ); // does not work
// it fails because expressions can't be indexed, even though they
// are extremely similar to lists (as seen above).
// I'm not sure why it needs to be that way.
xxxInto(...) 関数は既存の式ツリーをその場で変更するため、この関数の使用が推奨されます。場合によっては、効率性の問題になることがあります (式のフラグメントのコピーを作成して再構築する場合と比較して)。ただし、演算子をリストとして扱う方が少し明確になります。
ありがとう@hogi 、 @jthi
Re: 式のインデックス作成: 式ツリーを登るのを手伝ってください@jthi 、素晴らしい解決策なので、このトピックはディスカッションで扱う方がずっと良いと思います。
https://community.jmp.com/t5/Discussions/Expression-Indexing-How-to-climbing-the-Expression-Tree/mp/697406
そこにコメントを追加していただけますか?そうすれば、解決策として受け入れます
Re: 式のインデックス作成: 式ツリーを登るのを手伝ってください@jthi さん、ありがとう!
素晴らしい -抽出 expr - Substitute (... List) を介した私の回避策よりもはるかに優れています:
-> 問題 1 と 3 を修正
問題 2 については、 2 番目の例は優れた回避策であり、同時に次の点も示しています。
のシンプルさを示しています式のインデックス作成。
Extract expr - が使用可能な場合、Expression Indexing の読み取りアクセスを緊急に行う必要はありません。:)
編集 :
ああ! Extract Expr は最初の出現箇所を見つけるだけです!
Re: 式のインデックス作成: 式ツリーを登るのを手伝ってくださいJMPにはExtract Exprという機能があり、これを簡単にしてくれます。
Names Default To Here(1);
myExpr = Expr(
gb = dt << Graph Builder(
Size(437, 413),
Graph Spacing(4),
Variables(X(:height), Y(:weight), Overlay(:sex)),
Elements(Points(X, Y, Legend(1)), Smoother(X, Y, Legend(2)))
)
);
yexpr = Extract Expr(myExpr, Y(Wild()));
variables_expr = Extract Expr(myExpr, Variables(Wild List()));
Names Default To Here(1);
myExpr = Expr(
gb = dt << Graph Builder(
Size(437, 413),
Graph Spacing(4),
Variables(X(:height), Y(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(1)), Smoother(X, Y, Legend(2)))
)
);
variables_expr = Extract Expr(myExpr, Variables(Wild List()));
idx = 0;
For(i = 1, i <= N Arg(variables_expr), i++,
firstlevel = Arg(variables_expr, i); // could use Extract Expr
If(Head(firstlevel) == Expr(Y) & idx == 2,
secondlevel = Arg(firstlevel, 1);
);
);
show(secondlevel);
Re: :folded_hands: 式のインデックス作成: 読み取りおよび書き込みアクセス式インデックスの別のアプリケーション - 書き込みモード:
ヘッド()を置き換えますか?
すでに利用可能なウィッシュがあります: 最初の出現を置換
はい、お願いします:)
Re: :folded_hands: 式のインデックス作成: 読み取りおよび書き込みアクセス最も重要なユースケースはすでに利用可能または確保されています。
@Sarah-Sylvestre 、ステータスは次のように設定されている可能性があります 今のところ予定なし