复杂NA的行为不一致?

Pat*_*rry 5 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
Run Code Online (Sandbox Code Playgroud)

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


稻草人的建议

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

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

为了保持在这个"等价表示"世界的一致性,如果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
Run Code Online (Sandbox Code Playgroud)

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

identical(z[1], z[3], single.NA = FALSE)
#> FALSE
Run Code Online (Sandbox Code Playgroud)