Re:JSL:脚本改变行状态不起作用JMP的列公式在后台进行评估;对于具有复杂公式和大量行的表,这允许JMP在公式评估期间保持交互。 您可以滚动表格并使用其他表格和平台。
将<< runFormulas消息发送到表使得公式在其他任何事情发生之前完成评估。 使用wait(N)不是一个很好的答案,因为无法知道等待多长时间。 我试过等待(0)但这还不够长。 一秒钟的等待工作,但比需要的时间长一点。 << runFormulas如果已完成评估,则不会重新运行公式,因此您可以使用它而不必担心使JSL代码变慢。
在您的示例中,JSL仍在运行,并且在复制公式列时没有任何机会对列公式进行后台处理。 如果单独运行最后一行,则在执行最后一行之前进行后台评估,因此将使用计算值更新行状态。
通常JMP知道公式何时需要完成评估;例如,推出一个新平台。 << CopyToRowStates尚未意识到。 谢谢你指出来。
我没有看到使用wait(0)崩溃。 如果崩溃是可重现的,请与技术支持人员一起发送脚本和崩溃报告文件。
Re:JSL:脚本改变行状态不起作用等待(0); JMP崩溃了。运行公式,工作。
谢谢!但是,我仍然无法理解为什么
回顾一下:
1)我创建一个随机数
2)我根据随机数创建行状态列
3)我根据行状态列分配行状态
任何特殊的原因2)可以运行而不需要在1)之后指定'run formula',但是,为了3)工作,我必须在2)之后指定运行公式?是否存在逻辑原因,或者这是JSL脚本语言的许多未记录的怪癖之一?
Re:JSL:脚本改变行状态不起作用尝试发送消息运行公式到数据表。 此消息在继续执行下一个JSL语句之前完成所有公式评估。
dt <<运行公式;
如果这不起作用,请尝试改为等待(0)。
JSL:更改行状态的脚本不起作用我将这个简单的脚本放在一起,通过创建行状态列将数据表分为训练,测试和验证子集。
然后,我在末尾有一行代码,用于复制“训练集”行状态列中的行状态。
奇怪的是,如果我运行整个脚本,则不会复制行状态。如果我先运行除最后一行之外的所有内容,然后分别运行最后一行,那么它将起作用。
有想法该怎么解决这个吗?我是否缺少某些东西或是一个错误?
谢谢!
New Column( "Random", Numeric, Formula( Random Uniform() ) );
New Column( "Data Set Indicator",
Character,
Formula( If( :Random <= 0.6, "Training", 0.6 < :Random <= 0.8, "Validation", "Test" ) )
);
New Column( "Training set",
Row State,
set formula(
Combine States(
Excluded State( :"Data Set Indicator" != "Training" ),
Hidden State( :"Data Set Indicator" != "Training" )
)
)
);
New Column( "Validation set",
Row State,
set formula(
Combine States(
Excluded State( :"Data Set Indicator" != "Validation" ),
Hidden State( :"Data Set Indicator" != "Validation" )
)
)
);
New Column( "Test set",
Row State,
set formula(
Combine States(
Excluded State( :"Data Set Indicator" != "Test" ),
Hidden State( :"Data Set Indicator" != "Test" )
)
)
);
Column( "Training set" ) << Copy to row states();
回复:JSL:更改行状态的脚本不起作用此线程的结果是,从JMP 12开始,使用新Table()在后台自动调用<< Run Formulas()消息。