为什么没有NA_logical_

Ari*_*man 13 r missing-data

来自help("NA"):

还存在支持缺失值的其他原子向量类型的常量NA_integer_,NA_real_,NA_complex_和NA_character_:所有这些都是R语言中的保留字.

我的问题是为什么没有NA_logical_或类似,以及如何处理它.

具体来说,我正在创建几个非常相似data.table的大型s,它们应该是类兼容的,以便以后使用rbind.当其中一个data.tables缺少变量时,我正在创建该列,但将其设置为NA特定类型的所有s.但是,对于合乎逻辑的我不能那样做.

在这种情况下,它可能并不重要(data.table不喜欢将列从一种类型强制转换为另一种类型,但它也不喜欢添加行,所以我必须创建一个新表来保存rbound版本),但我很困惑至于为什么NA_logical_逻辑上应该存在的,不是.

例:

library(data.table)
Y <- data.table( a=NA_character_, b=rep(NA_integer_,5) )
Y[ 3, b:=FALSE ]
Y[ 2, a:="zebra" ]
> Y
       a  b
1:    NA NA
2: zebra NA
3:    NA  0
4:    NA NA
5:    NA NA
> class(Y$b)
[1] "integer"
Run Code Online (Sandbox Code Playgroud)

两个问题:

  1. 为什么不NA_logical_存在,当它的亲戚呢?
  2. 我应该在data.table尽可能避免胁迫的情况下做些什么呢?我假设使用NA_integer_在强制方面买了一点(它会强制我加入0L/1L的逻辑,这不是很糟糕,但并不理想.

G. *_*eck 14

NA已经合乎逻辑,所以NA_logical_不需要.只需NA在需要缺少逻辑的情况下使用.注意:

> typeof(NA)
[1] "logical"
Run Code Online (Sandbox Code Playgroud)

由于NA_*_名称都是保留字,因此可能希望最小化它们的数量.

例:

library(data.table)
X <- data.table( a=NA_character_, b=rep(NA,5) )
X[ 3, b:=FALSE ]
> X
    a     b
1: NA    NA
2: NA    NA
3: NA FALSE
4: NA    NA
5: NA    NA
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,"NA"是逻辑版本是完全合理的,因为它可以被强制"向上"到其他任何东西. (4认同)