使自定义函数可在公式中使用大家好,
有没有办法注册包含函数的脚本以使它们可以在列公式中使用?
例如,如果编写了一个带有函数 hex2binary({str}) 的脚本,该函数将十六进制数转换为其二进制等效字符串,并且我希望能够在类似于内置函数之一的公式中调用此函数JSL公式,可以吗?
谢谢
射线
回复:使自定义函数可在公式中使用<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />看起来你已经在那里了。 但是,对于另一个示例,您可以在以下位置对加载项进行反向工程:
https://community.jmp.com/docs/DOC-7528
回复:使自定义函数可在公式中使用嗨 Ray3,杰夫,MS
前一段时间,但我实际上认为我知道如何做到这一点!
我还尝试了 MS 描述的“包含”方法,它可以工作,但速度非常慢。
但是,我还可以通过使用我的函数创建加载项,然后通过以下方式从公式编辑器调用它来使加载项方法起作用:
全局:myfunc()
更具体地说,我创建了这个函数(它是基于 R 的,实际上只是返回参数的平方根,但我认为这里并不重要:)
myRoot = 函数({x},
R 初始化();
R发送(x);
R 提交("
y <- sqrt(x)
”);
a = R 得到 (y);
R 项 ( );
返回(a);
);
然后我可以为新列添加这个公式:
全局:myRoot(:第 1 列)
干杯,
埃斯本
使自定义函数可在公式中使用嗨,杰夫,女士,
感谢您的提示。我尝试了这两个建议:
使用 Local(Include()) 函数可以工作,但对于我的数据集(大约 20,000 行长)来说速度相当慢,因为每次计算公式时都会打开包含的文件。
我也尝试了Jeff的建议,并将该函数添加到JMPStart.jsl中。该函数显示在全局符号列表中,我可以在会话中从其他脚本调用它而不会出现问题。但是,如果我从列公式调用该函数,则会收到“名称未解析”错误。为了让列公式识别该函数,我需要做一些特殊的事情吗?
谢谢!
射线
使自定义函数可在公式中使用嗨雷,
无法让函数显示在公式编辑器的函数浏览器中,但可以通过双击公式元素并键入函数调用来在公式中使用用户定义的函数。
为了确保您的函数在每个 JMP 会话中定义,您有几个选项。
1) 您可以将函数声明放在 JMPStart.JSL 文件中。
2) 您可以制作一个没有菜单且除了声明这些函数之外没有其他功能的加载项。 只需将函数声明放在 addinload.jsl 文件中即可。 任何安装了该插件的 JMP 副本都将具有这些功能。
我希望这有帮助。
-杰夫
使自定义函数可在公式中使用我不知道在列公式中全局注册自定义函数的方法。 但是,有一种方法(可能不太方便)可以从保存的 jsl 文件在本地调用函数。
假设您保存了一个仅包含此函数的脚本。 该文件名为“plus_one”(或其他名称)。
加一=功能({ X } , X + 1 ) ;
要在列公式中调用此函数,请使用 local() 和 include() ,如下所示:
当地的(加一,
包括( “路径/plus_one.jsl” ) ;
加一( :柱子) ;
)
其中,path 是保存的 jsl 文件的路径,:Column 是您应用公式的列。 Include() 解析并评估文件中的 jsl 代码(但是文件未打开),如果没有本地上下文,您将收到错误。
它并不美观,但它可以工作,并且如果函数非常复杂并且经常重用,则可能很有用。
实际上,我只是想到应该可以将所有自定义公式收集在一个文件中,并使用启动脚本来设置路径变量。 那么它们将更容易“全球”实施。 存储函数中的任何更改都将转换到所有数据表中,而无需编辑具有用户定义函数的每一列。 我还没有测试过这个想法,但这是一个有趣的前景。 不过,这可能是一种消耗内存的方法。