我发现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;世界,如果z1
和z2
是复杂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
应该查看值的二进制表示的唯一操作是identical
,single.NA
设置为FALSE
:
identical(z[1], z[3], single.NA = FALSE)
#> FALSE