'selectwhere'および 'name selection incolumn'でのパラメーターの使用こんにちは、
XとYの2つの列で構成されるデータテーブルを取得し、データテーブルのいくつかの行を選択して、選択に名前を付ける必要があります。 これは、xyデカルト空間で20個の長方形を選択し、それらに番号(1から20)で名前を付けることに対応します(私は画像で作業しています)。
スクリプトを作成しましたが、機能しません。 私は2つの問題を解決する必要があると思います:1)パラメータをどのように使用できますか? 'select where'の引数でX1、X2、..を参照してください? 2)「列の名前選択」の引数でパラメータを使用するにはどうすればよいですか(n_patchを参照)?
どうもありがとう。
スクリプトは次のとおりです。
dt = Current Data Table();
X0 = 2332;
Y0 = 558;
n_patch = 0;
delta_x = 100;
delta_y = 100;
dist_y = 488;
dist_x = 656;
L_x = 500;
L_y = 500;
For( n_x = 1, n_x <= 4, n_x++,
For( n_y = 1, n_y <= 5, n_y++,
Xc = X0 - (n_x - 1) * (dist_x) + L_x / 2;
Yc = Y0 + (n_y - 1) * (dist_y) + L_y / 2;
n_patch = n_patch + 1;
X1 = Xc - delta_x;
X2 = Xc + delta_x;
Y1 = Yc - delta_y;
Y2 = Yc + delta_y;
dt << Row Selection(
Select where( (:X >= X1 & :X <= X2) & (Y >= Y1 & Y <= Y2) )
);
dt << Name Selection in Column(
Column Name( "Patch#" ),
Selected( ("n_patch") ),
Unselected( "" )
);
)
);
データ表スクリプティング再: 'selectwhere'および 'name selection incolumn'でのパラメーターの使用こんにちは@MFVIT 、
データテーブル自体で何かを探すのではなく、スクリプトでX1とY1の値が評価されていることを確認する必要があります。この問題はに示されていますEval Insert、Eval Expr、Parse、およびSubstituteを使用して、ある式を別の式に挿入します。 。 Eval(Eval Expr())を使用して、これが確実に行われるようにすることができます。 これは、サンプルデータテーブルでコードを使用した例です。
Names default to here(1);
dt = New Table( "Example Data",
Add Rows( 10000 ),
New Column( "X", Numeric, "Continuous", Format( "Best", 12 ),
Formula( Random Uniform( 0, 10000 ) ) ),
New Column( "Y", Numeric, "Continuous", Format( "Best", 12 ),
Formula( Random Uniform( 0, 10000 ) ) )
);
X0 = 2332;
Y0 = 558;
n_patch = 0;
delta_x = 100;
delta_y = 100;
dist_y = 488;
dist_x = 656;
L_x = 500;
L_y = 500;
For( n_x = 1, n_x <= 4, n_x++,
For( n_y = 1, n_y <= 5, n_y++,
Xc = X0 - (n_x - 1) * (dist_x) + L_x / 2;
Yc = Y0 + (n_y - 1) * (dist_y) + L_y / 2;
n_patch = n_patch + 1;
X1 = Xc - delta_x;
X2 = Xc + delta_x;
Y1 = Yc - delta_y;
Y2 = Yc + delta_y;
Eval( Eval Expr(
dt << Row Selection(
Select where( (:X >= Expr( X1 ) & :X <= Expr( X2 )) & (:Y >= Expr( Y1 ) & :Y <= Expr( Y2 ) ) )
);
) );
dt << run formulas;
dt << Name Selection in Column(
Column Name( "Patch#" || char( n_patch ) ),
Selected( "n_patch = " || char( n_patch ) ),
Unselected( "" )
);
)
);再: 'selectwhere'および 'name selection incolumn'でのパラメーターの使用こんにちは、迅速な返信ありがとうございます。
あなたのコードは私にとって非常に便利です、私は正しい道を進んでいると思います。 ただし、まだ機能しないものがあります。
コードを実行しようとしましたが、「Patch#1」、「Patch#2」などの名前の列が多数追加されているので、行を変更しました。
Column Name( "Patch#" || char( n_patch ) )
と
Column Name( "Patch#")
Patch#という名前の列が1つだけ必要だからです。
しかし、コードは私が選択されると期待するものを選択しません。 パッチ5、10、15、20のみを選択し、他のパッチは選択しません。さらに、選択した行はパッチに対応していません。
そのため、選択コマンドが正しく機能しているかどうかはわかりません。
助けてくれてありがとう。
マルチェロ。
再: 'selectwhere'および 'name selection incolumn'でのパラメーターの使用少し古いバージョンのJMPを使用している可能性があるため、これらが機能するかどうかはわかりません(列で行選択または名前選択を使用しない)。
<< get rows whereで関心のある行を取得し、column()[rows]で値を設定できます。
dt << New Column("Patch#", Character);
For( n_x = 1, n_x <= 4, n_x++,
For( n_y = 1, n_y <= 5, n_y++,
Xc = X0 - (n_x - 1) * (dist_x) + L_x / 2;
Yc = Y0 + (n_y - 1) * (dist_y) + L_y / 2;
n_patch = n_patch + 1;
X1 = Xc - delta_x;
X2 = Xc + delta_x;
Y1 = Yc - delta_y;
Y2 = Yc + delta_y;
wantedRows = dt << get rows where(:X >= X1 & :X <= X2 & :Y >= Y1 & :Y <= Y2);
Column(dt, "Patch#")[wantedRows] = char(n_patch);
)
);