在“选择位置”和“列中选择名称”中使用参数你好,
我需要一个由两列X和Y组成的数据表,选择数据表的几行并命名选择。 这对应于在xy笛卡尔空间中选择二十个矩形,并用数字(从1到20)命名它们(我正在处理图像)。
我写了一个脚本,但是不起作用。 我认为我需要解决两个问题: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( "" )
);
)
);
数据表脚本编写回复:在“选择位置”和“列中选择名称”中使用参数你好@MFVIT ,
您需要确保在脚本中评估了X1和Y1的值,而不是在数据表本身中查找内容。这个问题在使用Eval插入,Eval Expr,解析和替换将一个表达式插入另一个表达式。 您可以通过使用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( "" )
);
)
);回复:在“选择位置”和“列中选择名称”中使用参数您好,非常感谢您的及时答复。
您的代码对我非常有用,我认为我的方法是正确的。 但是,仍然有些东西行不通。
我尝试运行您的代码,发现它添加了许多名为“ Patch#1”,“ Patch#2”等的列,因此我更改了该行
Column Name( "Patch#" || char( n_patch ) )
和
Column Name( "Patch#")
因为我只想要一列名称为Patch#的列。
但是代码没有选择我希望选择的内容。 它仅选择patch5、10、15和20,而不选择其他补丁,而且所选行不对应于补丁。
因此,我不确定选择命令是否正常工作。
非常感谢您的帮助。
马塞洛。
回复:在“选择位置”和“列中选择名称”中使用参数您可能使用的是JMP的旧版本,所以我不确定它们是否适合您(不使用列中的行选择或名称选择)。
您可以通过<<获取感兴趣的行,然后在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);
)
);