hacer funciones personalizadas utilizables en fórmulasHola a todos,
¿Hay alguna manera de registrar un script que contenga funciones para que se puedan utilizar en fórmulas de columna?
Por ejemplo, si escribí un script con una función hex2binary({str}) que convierte un número hexadecimal en una cadena de su equivalente binario, y quisiera poder llamar a esta función en una fórmula similar a una de las integradas Fórmula JSL, ¿es eso posible?
Gracias
Rayo
Re: hacer funciones personalizadas utilizables en fórmulas<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Parece que ya estás allí. Pero, para otro ejemplo, puede aplicar ingeniería inversa al complemento en:
https://community.jmp.com/docs/DOC-7528
Re: hacer funciones personalizadas utilizables en fórmulasHola Ray3, Jeff, MS.
Hace algún tiempo, ¡pero creo que descubrí cómo hacer esto!
También probé el método "incluir" descrito por MS y funciona, pero es increíblemente lento.
Sin embargo, también pude hacer que el método del complemento funcionara creando el complemento con mi función y luego llamándolo desde el editor de fórmulas mediante
global:mifunc()
Más específicamente, hice esta función (está basada en R y en realidad solo devuelve la raíz cuadrada del argumento, pero supongo que no importa aquí 
miRaíz = Función({x},
R Iniciar( );
R enviar (x);
R Enviar("
y <- raíz cuadrada (x)
");
a = R Obtener (y);
Término R( );
Devolver(a);
);
Y luego podría agregar esta fórmula para una nueva columna:
global:miRaíz(:Columna 1)
Salud,
Esben
hacer funciones personalizadas utilizables en fórmulasHola Jeff, MS,
Gracias por las sugerencias.Probé ambas sugerencias:
El uso de funciones Local(Include()) funcionó, pero fue bastante lento para mi conjunto de datos (que tiene aproximadamente 20,000 líneas) ya que cada vez que calcula la fórmula, abre el archivo incluido.
También probé la sugerencia de Jeff y agregué la función a JMPStart.jsl.La función aparece en la lista global de símbolos y puedo llamarla desde otros scripts sin problemas en una sesión.Sin embargo, si llamo a la función desde una fórmula de columna, aparece el error "nombre no resuelto".¿Hay algo especial que deba hacer para determinar el alcance y obtener que la fórmula de la columna reconozca la función?
¡Gracias!
Rayo
hacer funciones personalizadas utilizables en fórmulasHola Ray,
No hay forma de hacer que la función aparezca en el navegador de funciones del Editor de fórmulas, pero las funciones definidas por el usuario se pueden usar en fórmulas haciendo doble clic en un elemento de fórmula y escribiendo la llamada a la función.
Para asegurarse de que sus funciones estén definidas en cada sesión de JMP, tiene un par de opciones.
1) Puede colocar la declaración de su función en el archivo JMPStart.JSL.
2) Puede crear un complemento que no tenga menús ni funcionalidad más allá de declarar estas funciones. Simplemente coloque las declaraciones de funciones en el archivo addinload.jsl. Cualquier copia de JMP que tenga ese complemento instalado tendrá esas funciones disponibles.
Espero que eso ayude.
-Jeff
hacer funciones personalizadas utilizables en fórmulasNo conozco una forma de registrar funciones personalizadas globalmente que funcione en fórmulas de columna. Sin embargo, existe una manera, quizás no muy conveniente, de llamar una función localmente desde un archivo jsl guardado.
Digamos que ha guardado un script solo con esta función. El archivo se llama "plus_one" (o lo que sea).
mas uno = función ({ X } , X + 1 ) ;
Para llamar a esta función dentro de una fórmula de columna, use local() e include() como se muestra a continuación:
Local ( mas uno ,
Incluir ( "ruta/plus_one.jsl" ) ;
mas uno ( : Columna ) ;
)
Donde ruta es la ruta al archivo jsl guardado y :Columna es la columna a la que aplica la fórmula. Include() analiza y evalúa el código jsl en el archivo (sin embargo, el archivo no se abre) y sin el contexto local obtendrá un error.
No es bonito pero funciona y puede resultar útil si la función es muy compleja y se reutiliza con frecuencia.
En realidad, se me ocurrió que debería ser posible recopilar todas mis fórmulas personalizadas en un solo archivo y usar un script de inicio para configurar la variable de ruta. Entonces serían más fáciles de implementar "globalmente". Y cualquier cambio en las funciones almacenadas se traducirá a todas sus tablas de datos sin la necesidad de editar cada columna que tenga una función definida por el usuario. No he probado esta idea, pero es una perspectiva intrigante. Sin embargo, puede ser un enfoque que consume mucha RAM.