DataFrames.jl实现了缺失值的NA:
help?> NA
NA
A value denoting missingness within the domain of any type.然而,朱莉娅已经有了一种NaN类型:
help?> NaN
NaN
A not-a-number value of type Float64.这个设计决定的原因是什么?
发布于 2017-11-22 09:40:58
所有编程语言答案:
NA表示缺少的值。
NaN表示未定义的算术计算。
根据定义,它们是不同的,因此需要两种不同的“事物”来描述它们。
例如,考虑用于n/n的序列n = ..., -2, -1, 0, 1, 2, ...。在这个序列中,当n = 0时,序列元素是0/0,没有很好的定义,因此计算结果为NaN。但从任何意义上说,0/0序列的元素都不会丢失,所以NA在这种情况下是不合适的。
对比的例子是来自一些环境传感器,a, b, NA, d的一系列观测。第三次观测时传感器出现故障,因此被记录为丢失。尽管如此,在第三次观测时,如果传感器没有故障的话,传感器应该记录一些真实值c,这在算术上定义得很好。
在同一数据集中发生这两件事所需要的是一些可能发生丢失数据的设置,以及在某些情况下可能在算术上定义不好的观察结果。因此,NaN和NA需要区分开来。
朱莉娅具体回答: NaN是Float64型。但是,如果您的数据集是其他类型的,如Int或String呢?如果我们使用NaN来表示丢失的数据,那么您的数据集需要是一个联合类型的数组,例如Union{Int, Float64}或Union{String, Float64},这意味着性能将受到影响(参见讨论联合类型的官方文档中的性能提示部分)。相反,已经做了大量的工作(内存中的工作达到了0.6版),以确保可以使用NA来表示许多不同类型的数组中丢失的数据,而不会造成很大的性能损失。这是如何实现的?这绝对是另外一个(但很有趣)的问题,老实说,我认为我没有资格回答这个问题。
https://stackoverflow.com/questions/47428837
复制相似问题