问题描述
我有一个包含共享交易的 6 列和数千行数据框。我想识别价格数据不佳的行。以下函数为我提供了一个包含具有良好价格数据的行的子集:
function in_price_range(df)
price_good = subset(df,:UnitPrice => X-> (trough_share_price .<= X .<= peak_share_price),skipmissing=true)
return price_good
end
对于我尝试过的坏数据子集:
function out_price_range(df)
price_discrepancy = subset(df,:UnitPrice => X-> (X .< trough_share_price || X .> peak_share_price),skipmissing=true)
return price_discrepancy
end
然而,这个错误TypeError: non-boolean (BitVector) used in boolean context
我试过了。||而不是 ||但这会产生错误:语法:“|”不是一元运算符
如何修复代码?
解决方法
在 Julia 中,||
是
help?> ||
search: ||
x || y
Short-circuiting boolean OR.
短路部分的意思是,如果 x
为真,||
甚至不会计算 y
。换句话说,这将在代码中创建一个分支。例如:
julia> 5 < 7 || print("This is unreachable")
true
如果您想编写对这种情况有效的代码,这很棒
if something_easy_to_evaluate || something_costly_to_evaluate
# Do something
end
换句话说,这就是控制流!显然,这不能广播。为此,您需要的是常规的 or
运算符 |
,您可以使用 .|
进行广播。例如:
julia> a = rand(3) .< 0.5
3-element BitVector:
1
0
0
julia> b = rand(3) .< 0.5
3-element BitVector:
0
1
0
julia> a .|| b
ERROR: syntax: "|" is not a unary operator
Stacktrace:
[1] top-level scope
@ none:1
julia> a .| b
3-element BitVector:
1
1
0
同样适用于&&
vs &
;前者仅用于控制流,后者是正常的按位and
。