绝对可以是RTFM,但我有一个问题:
在我的一个JMP数据集中,我在多个公式列中使用一个函数作为中间函数。为了防止重复相同的代码(如果必须更改该函数,则避免重复工作),我将该函数放在脚本中并将其保存到数据表中。
当我打开数据集并想要添加数据时,问题就来了。为了使公式列正常运行,我首先必须单击脚本旁边的绿色箭头才能首先运行脚本,然后才能执行公式列的工作。如果脚本未运行,则函数未定义。
有没有办法以类似于表变量的形式制定此类函数,当打开数据文件时会自动运行这些函数?
编辑:我附加了示例文件。该脚本在“工具功能”脚本中。
查看OnOpen脚本是否满足您的需求;它将(默认情况下)提示。您可以根据需要更改首选项。请注意,当运行以下脚本时,OnOpen脚本不会运行,但是如果保存了空表,请将其关闭并再次打开,该脚本将运行。然后将行添加到新打开的表中将能够使用全局功能。
New Table( "globalFunctionOnOpen",
Add Rows( 0 ),
New Script( "OnOpen", global:myFunc = Function( {a, b}, a + b ) ),
New Column( "x", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [] ) ),
New Column( "y", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [] ) ),
New Column( "z", Numeric, "Continuous", Format( "Best", 12 ), Formula( global:myfunc( :x, :y ) ), Set Selected )
) @robhanssen ,
以下是几个要考虑的选项。最佳选择取决于使用情况。
- 重构: 对于此示例,可以通过一列称为MTD的列来实现简单的实用程序功能。 该函数返回1或0。然后更改您的函数:将yearToDate(:month,:Elec Cost)更改为:MTD *:ElecCost。 换句话说,尽可能使用列函数。
- 制作外接程序 :特定于表的东西称为UpdateMyTablename,或者运行所有实用程序功能的脚本称为RunUtiltyFunc。请注意,外接程序可以由其他用户共享和使用,并且可以按需运行,并且除非删除全局变量,否则整个会话都可以使用该功能。
- 创建启动脚本 :如果您具有一组可能经常使用的实用程序功能,则可以通过启动脚本来定义/包含/运行它们。我使用的示例包括:公司制造特定的班次定义,工作周功能,徽标或常用的数学功能。来自 JMP脚本指南> 创建应用程序 > 加载项
指定启动和退出脚本(可选)
单击“启动脚本”选项卡以添加一个在JMP启动时运行的脚本(以及该加载项)
开始)。您可以选择现有脚本(在此文件中运行JSL)或复制并粘贴脚本(运行
此JSL)。例如,您可以提供一条消息,告诉用户该加载项是
在启动时安装。