如何创建将多列作为输入的自定义转换函数?脚本指南在描述如何制作新的自定义转换函数方面非常有用,但对于如何处理多列并不是很清楚。
如何创建将多列作为输入的自定义转换函数? 例如,如果我选择一个 X、一个 Y 和一个 Z 列并且想要获取这三列的 RSS(平方根)?
另外,如果顺序很重要,那么该顺序是如何设置的? 是选择列的顺序吗?
回复:如何创建一个将多列作为输入的自定义转换函数?funcDef = Function( { number }, { i, sum },
If( Is List( number ),
Sqrt( Summation( i = 1, N Items( number ), number[i]^2 ) ),
.
);
);
description = "This function returns the root sum squared of a list numbers.";
parmHint = "a list of numbers";
/* create function using variables
the commands can also be accepted as arguments in New Custom Function */
newAdd = New Custom Function( "mySpace", "RSS", funcDef );
newAdd << Description( description );
newAdd << Prototype( "mySpace:RSS( {} )" );
newAdd << Example( "mySpace:RSS( {1,2,3} )" );
// expr() Examples need to be passed inside NameExpr()
newAdd << Parameter( "List", parmHint );
newAdd << Formula Category( "MyNumberStuff" );
// add mySpace:RSS function to system
Add Custom Functions( newAdd );回复:如何创建一个将多列作为输入的自定义转换函数?对不起,我太慢了,我不知道该怎么做。回复:如何创建一个将多列作为输入的自定义转换函数?好的,然后将 Here 命名空间替换为您自己的命名空间。
回复:如何创建一个将多列作为输入的自定义转换函数?我将该函数复制/粘贴到一个新的 JSL 脚本中并运行它,但日志显示此错误:“无法重新定义预定义的 JMP 命名空间”回复:如何创建一个将多列作为输入的自定义转换函数?这是一个新函数,它接受一个列表并返回相同的计算。
Names Default to Here( 1 );
// example
my numbers = List( 1, 2, 3, 4, 5 );
// define it
funcDef = Function( { number }, { i, sum },
If( Is List( number ),
Sqrt( Summation( i = 1, N Items( number ), number[i]^2 ) ),
.
);
);
// test it
Show( funcDef( my numbers ) );回复:如何创建一个将多列作为输入的自定义转换函数?我会查找列表参数,谢谢。
不知道您在双引号中在说什么,或者关于 JMP 提供自定义函数和转换的评论的基础。回复:如何创建一个将多列作为输入的自定义转换函数?我避免使用双引号。 它们通常没有持久的价值。 JMP 提供自定义函数和自定义转换。 为什么不按预期使用它们?
如果您的函数必须使用可变数量的参数,您总是可以使用列表参数而不是标量参数。
回复:如何创建一个将多列作为输入的自定义转换函数?感谢您的回复,马克! 几个快速的后续问题:
1. 我知道 JMP *supports* 多列转换函数——只是它还不支持多列 *custom* 转换吗?
2. 你的函数接受 3 个参数——是否可以定义一个接受任意数量参数的函数?回复:如何创建一个将多列作为输入的自定义转换函数?我认为自定义功能是您的情况的更好选择。 自定义转换仅限于单个输入。 自定义函数不受此限制。
funcDef = Function( {x, y, z}, Sqrt( Sum( x^2, y^2, z^2 ) ) );
description = "This function returns the root sum squared of three numbers.";
// examples can be multiple statements inside expr()
ex2 = Expr(
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Here:RSS( :age[1], :age[2], :age[3] );
);
parmHint1 = "x value";
parmHint2 = "y value";
parmHint3 = "z value";
/* create function using variables
the commands can also be accepted as arguments in New Custom Function */
newAdd = New Custom Function( "Here", "RSS", funcDef );
newAdd << Description( description );
newAdd << Prototype( "Here:RSS(x,y,z)" );
newAdd << Example( "Here:RSS(1,2,3)" );
// expr() Examples need to be passed inside NameExpr()
newAdd << Example( Name Expr( ex2 ) );
newAdd << Parameter( "Number", parmHint1 );
newAdd << Parameter( "Number", parmHint2 );
newAdd << Parameter( "Number", parmHint3 );
newAdd << Formula Category( "NumberStuff" );
// add myNamespace:Add Ten function to system
Add Custom Functions( newAdd );
函数内的表达式可能包含满足任何正确顺序需求的逻辑。