我可以选择等于的值的数据
data = rand(1:3, 10)
value = 2
data .== value
或等于
的值列表values = [1, 2]
in.(data, (values,))
最后一个是通用的,也可用于标量:in.(data, (value, ))
。
但是,此方法适用于Int
,但泛型不适用于String
值:
data = rand(["A", "B", "C"], 10)
value = "B"
data .== value
values = ["A","B"]
in.(data, (values, ))
in.(data, (value, ))
ERROR: use occursin(x, y) for string containment
有String
的通用方法吗?
对于通用的val
输入,我正在编写以下内容,但我认为必须有更好的解决方案。
isa(val, AbstractArray) ? in.(data, (val,)) : data .== val
背景:我正在创建一个函数来从数据框中选择行(并对它们进行某些操作),但我希望既允许值列表,也可以允许单个值。
答案 0 :(得分:2)
这是一个值得了解的技巧:
[x;]
现在-如果x
是一个数组,它将保留为数组。如果x
是标量,它将成为1元素数组。这正是您所需要的。
所以你可以写
in.(data, ([val;],))
缺点是它分配了一个新数组,但是我猜想val
很小,并且它不在性能关键的代码中使用吗?如果代码对性能至关重要,我认为最好通过单独的分支处理标量和数组。