utilizzo dei parametri in 'seleziona dove' e 'selezione nome in colonna'Ciao,
Devo prendere una tabella dati composta da due colonne, X e Y, selezionare diverse righe della tabella dati e nominare la selezione. Ciò corrisponde a selezionare venti rettangoli nello spazio cartesiano xy e denominarli con un numero (da 1 a 20) (sto lavorando con un'immagine).
Ho scritto una sceneggiatura ma non funziona. Penso di dover risolvere due problemi: 1) come posso usare un parametro, vedi X1, X2, .., nell'argomento di 'seleziona dove'? 2) come posso utilizzare un parametro, vedere n_patch, nell'argomento di 'selezione del nome nella colonna'?
Grazie molto.
Ecco lo script:
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( "" )
);
)
);
Tabella datiScriptingRi: utilizzo dei parametri in "seleziona dove" e "selezione del nome nella colonna"Ciao @MFVIT ,
Devi assicurarti che i valori di X1 e Y1 siano valutati nello script, piuttosto che cercare qualcosa nella tabella dati stessa.Questo problema è illustrato in Inserire un'espressione in un'altra utilizzando Eval Insert, Eval Expr, Parse e Substitute . È possibile assicurarsi che ciò avvenga utilizzando Eval (Eval Expr ()). Ecco un esempio che utilizza il codice con una tabella dati di esempio.
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( "" )
);
)
);Ri: utilizzo dei parametri in "seleziona dove" e "selezione del nome nella colonna"Ciao, grazie mille per la tua pronta risposta.
Il tuo codice mi è molto utile, penso di essere sulla strada giusta. Tuttavia, c'è ancora qualcosa che non funziona.
Ho provato a eseguire il tuo codice e ho visto che aggiunge molte colonne con i nomi "Patch # 1", "Patch # 2", ecc.
Column Name( "Patch#" || char( n_patch ) )
con
Column Name( "Patch#")
perché voglio solo una colonna con il nome Patch #.
Ma il codice non seleziona ciò che mi aspetto venga selezionato. Seleziona solo le patch 5, 10, 15 e 20 e non le altre patch e inoltre le righe selezionate non corrispondono alle patch ..
Quindi, non sono sicuro che il comando di selezione funzioni correttamente.
Molte grazie per qualsiasi aiuto.
Marcello.
Ri: utilizzo dei parametri in "seleziona dove" e "selezione del nome nella colonna"Potresti usare una versione leggermente più vecchia di JMP, quindi non sono sicuro che funzionerà per te (non usando la selezione della riga o la selezione del nome nella colonna).
Puoi ottenere le righe di interesse con << ottieni le righe dove e poi imposta i valori con la colonna () [righe]
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);
)
);