复杂NA的行为不一致?

时间:2018-03-23 18:07:06

标签: r

我发现R对复杂变量NA的处理不直观:

z <- complex(real      = c( 1,  1, NA, NA, NA),
             imaginary = c(NA, NA,  1,  1, NA))

print(z)
#> [1] NA NA NA NA NA

Re(z)
#> [1]  1  1 NA NA NA

Im(z)
#> [1] NA NA  1  1 NA

unique(z)
#> [1] NA

Re(unique(z))
#> [1] 1

identical(z[1], z[3])
#> FALSE

所有这些行为都是按照设计的吗?如果没有,哪些是错误?

稻草人提议

这是一个稻草人提案。我并不为此疯狂,但它会导致一致的行为:

看起来R开发人员已经在概念上决定只有一个复杂的NA值,但它有许多不同的表示形式。这些表示是在实数或虚部的二进制表示中具有NA的复数。

保持此等同表示的一致性&#34;世界,如果z1z2是复杂NA的两种不同表示,则f(z1)f(z2)应返回所有函数f的等效结果

在这种情况下,print(z)unique(z)的上述行为是正确的。

其他行为应如下:

Re(z)
#> [1] NA NA NA NA NA

Im(z)
#> [1] NA NA NA NA NA

Re(unique(z))
#> [1] NA

identical(z[1], z[3])
#> TRUE

应该查看值的二进制表示的唯一操作是identicalsingle.NA设置为FALSE

identical(z[1], z[3], single.NA = FALSE)
#> FALSE

0 个答案:

没有答案