提示此问题的原因是我导入到 JMP 中的一个表。 JMP 将 TRUE/FALSE 列导入为字符类型。 我想将它与其他逻辑/布尔计算结合起来,例如:
:TRUEFALSEcolumn & :NumericValue>100
但是,布尔运算符被设计为只能处理数字数据(我明白为什么)。 我一直在寻找与 R 的 as.logical() 函数等效的 JSL,并遇到了 JSL 的 As Boolean()。
在与技术支持互动后(请参阅此处跟踪编号引用的跟踪),我了解到创建 Boolean() 是为了支持 JMP 处理 JSON 文件的能力。 我认为这里有更多的潜力,并且希望看到布尔运算符(如 And()、Or() 和 Not())支持 As Boolean() 的输出。
是的,一个有效的解决方法是使用 Match() 语句将字符“FALSE”转换为数字 0,将字符“TRUE”转换为数字 1。 它不像 As Boolean(:TRUEFALSEcolumn) 那样简洁易读,而且是 JSL 语言中的细微差别,对于遇到较大统计编程语言知识问题的统计学家来说并不简单。 添加功能会很方便。 不可否认,这不是一个高优先级。
我们中的一些人最近正在研究这个问题。 正如您在此处报告的那样,该问题仍然存在,但我想分享一个比 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) )
)
);
迷人。 我理解它,但并不真的觉得它很直观。 所以还有改进的余地,但至少这有帮助。