Julia缺失值(missing)

Julia缺失值(missing)

在数理统计、数据挖掘或分析、机器学习等需要大规模数据的应用场景中,经常会出现缺失值(理论上应该存在,但观测数据没有实际的值), Julia提供了专门的Missing类型用于表达这种数据,而missing是该类型仅有的单例对象。该对象的作用类似于R语言中的NA,或SQL中的NULL。

不过,在使用missing中,不论是数学运算符还是函数,缺失性都会进行自动地传播。这样做的合理性很容易理解:输入值的不确定必然导致输出值的不确定,即涉及缺失值的操作一般均会生成缺失值。下面举例说明:

julia> missing + 1
missing

julia> "a" * missing
missing

julia> abs(missing)
missing

missing是Julia的正常对象,但只有当函数对其做出恰当的兼容性处理才能正常工作。第三方包同样需要对Missing类型做出恰当的处理,例如在定义函数时,如果实参是missing而定义的函数没有恰当处理,则会抛出MethodError异常。

missing对象在参与逻辑运算时,同样会进行缺失性传播,一旦有操作数是missing对象,那么结果也将是missing,例如:
Julia缺失值(missing)

需要注意的是,是否相等运算符==也是适用传播规则的,所以该运算符无法用于检测一个值是否是missing。如果需要进行检测,可使用ismissing()函数。不过,函数isequal()和是否相同运算符===是这种传播规则的特例:即使参数或操作数存在缺失值,仍会正常地返回一个布尔值结果。所以,这两个操作也可以用于测试某个值是否是missing值,例如:`

julia> ismissing(missing)
true

julia> missing === 1
false

julia> isequal(missing, 1)
false

julia> missing === missing
true

julia> isequal(missing, missing)
true

对于大小比较,虽然运算符受到传播规则的影响无法返回正常的布尔值,不过可以使用函数isless(),这是排序方法sort()的基础函数。例如:

julia> isless(1, missing)
true

julia> isless(missing, Inf)
false

julia> isless(missing, missing)
false

这是因为在Julia的数值系统中,missing值被处理为比任意类型的数值都大。

逻辑运算符在缺失传播方面同样有些特殊,是否能够产生正常布尔结果依赖于逻辑操作的定义。例如:

julia> true | missing
true

julia> missing | true
true

对于或操作,操作数中只要任意一个是true,则无论其他几个是否为true,结果都会是true,所以missing即使作为true之外的操作数并不会影响到结果的正常输出。

同样,对于与操作,操作数有一个是false的情况,无论其他操作数是否存在missing值,结果都会正常地输出false值,即:

julia> missing & false
false

julia> false & missing
false

反之,缺失性会传递。在或操作中,如果其中一个操作数是false,那么另外操作数是missing时,导致结果只能取missing,即缺失性传递下去了:

julia> false | missing
missing

julia> missing | false
missing

同时,在与操作中,其中一个操作数为true时则传递缺失性,例如:

julia> true & missing
missing

julia> missing & true
missing

另外,缺失性总会在异或操作中传播,这是因为在这种操作中,两个操作数都会对结果产生影响。同样,反操作符!在操作数为missing时也总会返回missing值。

在if、while及?:等控制逻辑结构中,条件表达式中是不允许出现missing的。这是因为missing无法明确地告知条件是否满足,所以Julia也无从判断后续的代码是否应该执行或者该如何执行,所以这种情况下会抛出TypeError异常。

在&&及||的运算中,missing的出现通常会引发异常,即:
Julia缺失值(missing)

与前述的逻辑运算类似的是,仅在missing是否存在都不会影响到判断时才能够正确输出结果(通常misssing作为最后一个操作数):

julia> true || missing
true

julia> false && missing
false

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!