Le problème à l'origine de cela provient d'une table que j'ai importée dans JMP. JMP importe une colonne TRUE/FALSE en tant que type Caractère. Je veux combiner cela avec d'autres calculs logiques/booléens, par exemple :
:TRUEFALSEcolumn & :NumericValue>100
Cependant, les opérateurs booléens sont conçus pour fonctionner uniquement avec des données numériques (je comprends pourquoi). Je suis allé chercher un équivalent JSL à la fonction as.logical() de R et je suis tombé sur As Boolean() de JSL.
Après interaction avec le support technique (voir la piste référencée par le numéro de suivi ici), je comprends que As Boolean() a été créé pour prendre en charge la capacité de JMP à gérer les fichiers JSON. Je pense qu'il y a plus de potentiel ici et j'aimerais voir la sortie de As Boolean() prise en charge dans les opérateurs booléens comme And(), Or() et Not().
Oui, une solution de contournement valide est une instruction Match() pour convertir le caractère "FALSE" en numérique 0, le caractère "TRUE" en numérique 1. Ce n'est tout simplement pas aussi concis et facile à lire que As Boolean(:TRUEFALSEcolumn) et c'est une nuance dans le langage JSL qui n'est pas simple pour les statisticiens qui rencontrent un problème avec la connaissance des langages de programmation statistiques plus larges. L'ajout de la capacité serait pratique. Certes pas une grande priorité.
Certains d'entre nous se penchaient sur cette question récemment. Le problème existe toujours comme vous l'avez signalé ici, mais je voulais partager une solution de contournement qui est toujours plus simple qu'une instruction 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) )
)
);
Fascinant. Je le comprends mais je ne le trouve pas vraiment intuitif. Il y a donc encore place à l'amélioration, mais au moins cela aide.