JMP 15 假定 jsl 中的左值是列名 - 这是有意的吗?JMP 15 假定左值是列名。 这不是早期版本中的行为。 这是有意为之还是一个错误?
重现:
dt=new table("test");
dt<<NEW column=""></NEW>这会在 JMP 15 中产生错误,但在 JMP 14 中不会产生错误。
高级统计建模消费者和市场研究回复:JMP 15 假定 jsl 中的左值是列名 - 这是有意的吗?嗨特克斯尼尔森
感谢您的精彩解释。 没有想到第一个::在::中引用全局命名空间。 我一定是14.3搞错了。 当我现在尝试时,我也收到警告。
你写了 ”默认情况下,如果只给出一个名称,例如在赋值语句中”。
这也是我所期望的,但如果数据表中的列具有相同的名称,JMP 明确假设它应该将值分配给该列。
正如大卫指出的那样,似乎名称默认为here(1)修复了该行为。 我总是等待将默认名称设置为here名称空间,因为它使调试更加麻烦。 但从现在开始,我一开始就会一直使用这个选项!
我希望 JMP 团队能够改变这种行为,因为它可能会产生一些很难发现的错误! 特别是,如果脚本实际上引用了没有 :'s 的列!
回复:JMP 15 假定 jsl 中的左值是列名 - 这是有意的吗?@lwx228是不正确的。一个变量和一个列可以具有相同的名称。实际上,这只是正确确定名称范围的问题,因此 JMP 知道您在谈论哪个
采取以下脚本
dt=new table("Example", new column("A") );
dt << add rows(1);
a = 13;
:: a =47;
:a[1] = a;
show(a,::a,:a[1],dt:a[1]);
结果是
a = 47;
a = 47;
:A[1] = 47;
dt:a[1] = 47;
这里发生的事情实际上是,所有变量和列都有一个由两部分组成的名称,用冒号“:”分隔
namespace:name
默认情况下,如果只给出一个名称,例如在赋值语句中
a = 13;
假设“a”是一个变量。如果变量名前面有冒号,
:a[1] = a;
假设它指的是一列。在上面的示例中,名为“a”的列中的第一行将被赋予名为“a”的变量的当前值 (13)。
还可以为变量和列提供完整的两部分名称。
对于变量,默认命名空间(名称的第一部分)称为“:”。没错,是一个冒号,所以变量“a”的完整专有名称是
::a
您可以看到在 Show() 语句中使用全名的结果及其结果
这个小脚本中列的完整专有名称由分配给数据表的指针变量和实际数据表列名称组成
dt:a
Show() 语句还说明了列的 2 部分名称用法
我希望这不仅没有让大家感到困惑,反而给了一些启发
回复:JMP 15 假定 jsl 中的左值是列名 - 这是有意的吗?我在 14.3 版本中也错误地运行了这个。

避免此错误的唯一方法是记住变量名不能与列名相同。
回复:JMP 15 假定 jsl 中的左值是列名 - 这是有意的吗?我认为行为取决于 global:a 是否已经存在。 这很烦人。
回复:JMP 15 假定 jsl 中的左值是列名 - 这是有意的吗?你需要
names default to here(1);
这很烦人——我不知道这是不是故意的;我更喜欢如果变量的范围仅作为列名并且带有冒号前缀(即:a)。
回复:JMP 15 假定 jsl 中的左值是列名 - 这是有意的吗?有趣的。 当我在 14.3.0 中运行它时,我没有收到错误。 我没有安装早期版本。
回复:JMP 15 假定 jsl 中的左值是列名 - 这是有意的吗?当我在 JMP 14.3 和 JMP 15.1 中启动新会话并运行您的脚本时,我在两个版本中都遇到相同的错误
Cannot set value for the column 'a' because the row number (0) is not valid.