El problema que provoca esto surge de una tabla que importé a JMP. JMP importa una columna de VERDADERO/FALSO como tipo de carácter. Quiero combinar esto con otros cálculos lógicos/booleanos, por ejemplo:
:TRUEFALSEcolumn & :NumericValue>100
Sin embargo, los operadores booleanos están diseñados para funcionar solo con datos numéricos (entiendo por qué). Fui a buscar un JSL equivalente a la función as.logical() de R y me encontré con As Boolean() de JSL.
Después de la interacción con el soporte técnico (consulte la pista a la que se hace referencia con el número de seguimiento aquí), entiendo que Boolean() se creó para respaldar la capacidad de JMP para manejar archivos JSON. Creo que hay más potencial aquí y me gustaría ver la salida de As Boolean() compatible con los operadores booleanos como And(), Or() y Not().
Sí, una solución alternativa válida es una instrucción Match() para convertir el carácter "FALSO" en 0 numérico, el carácter "VERDADERO" en 1 numérico. Simplemente no es tan conciso y fácil de leer como lo sería As Boolean(:TRUEFALSEcolumn) y es un matiz en el lenguaje JSL que no es sencillo para los estadísticos que tienen problemas con el conocimiento de los lenguajes de programación de estadísticas más grandes. Agregar la capacidad sería conveniente. Es cierto que no es una alta prioridad.
Algunos de nosotros estábamos viendo este problema recientemente. El problema aún existe como informó aquí, pero quería compartir una solución que aún es más fácil que una instrucción Match().
as boolean("TRUE")>0 & 100>99; //AND
as boolean("False")>0 & 100>99; //OR
//example table
New Table( "example AsBoolean",
Add Rows( 4 ),
New Column( "TrueFalseCol", Character, "Nominal",
Set Values( {"True", "False", "True", "False"} )
),
New Column( "value", Numeric, "Continuous",
Set Values( [100, 100, 50, 50] )
),
New Column( "product", Numeric, "Continuous",
Formula( As Boolean( :TrueFalseCol ) * :value )
),
New Column( "AND", Numeric, "Continuous",
Formula( and(As Boolean( :TrueFalseCol )>0, :value) )
),
New Column( "OR", Numeric, "Continuous",
Formula( or(As Boolean( :TrueFalseCol )>0, :value) )
),
New Column( "NOT", Numeric, "Continuous",
Formula( Not(As Boolean( :TrueFalseCol )>0) )
)
);
Fascinante. Lo entiendo pero realmente no encuentro que sea intuitivo. Así que todavía hay margen de mejora, pero al menos esto ayuda.