Il problema che lo richiede deriva da una tabella che ho importato in JMP. JMP importa una colonna TRUE/FALSE come tipo di carattere. Voglio combinare questo con altri calcoli logici/booleani, quindi ad esempio:
:TRUEFALSEcolumn & :NumericValue>100
Tuttavia, gli operatori booleani sono progettati per funzionare solo con dati numerici (capisco perché). Sono andato alla ricerca di un equivalente JSL della funzione as.logical() di R e mi sono imbattuto in As Boolean() di JSL.
Dopo l'interazione con il supporto tecnico (vedere la traccia a cui fa riferimento il numero di tracciamento qui) capisco As Boolean () è stato creato per supportare la capacità di JMP di gestire i file JSON. Penso che ci sia più potenziale qui e mi piacerebbe vedere l'output di As Boolean() supportato negli operatori booleani come And(), Or() e Not().
Sì, una soluzione alternativa valida è un'istruzione Match() per convertire il carattere "FALSE" in 0 numerico, il carattere "TRUE" in 1 numerico. Non è così conciso e di facile lettura come lo sarebbe As Boolean(:TRUEFALSEcolumn) ed è una sfumatura nel linguaggio JSL che non è semplice per gli statistici che incontrano un problema con la conoscenza dei più grandi linguaggi di programmazione stat. Aggiungere la capacità sarebbe conveniente. Certo, non è una priorità assoluta.
Alcuni di noi hanno esaminato questo problema di recente. Il problema esiste ancora come hai segnalato qui, ma volevo condividere una soluzione alternativa che è ancora più semplice di un'istruzione 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) )
)
);
Affascinante. Lo capisco ma non lo trovo davvero intuitivo. Quindi c'è ancora spazio per migliorare, ma almeno questo aiuta.