R 为什么没有自然逻辑_

R 为什么没有自然逻辑_,r,missing-data,R,Missing Data,从帮助(“NA”): 还有常数NA_integer_uu、NA_real_u、NA_complex_u和 支持缺失的其他原子向量类型的NA_字符 值:所有这些都是R语言中的保留字 我的问题是为什么没有NA\u logical\u或类似的东西,以及如何处理它 具体地说,我正在创建几个非常相似的大型数据.tables,它应该与以后的rbinding类兼容。当一个data.tables缺少变量时,我将创建该列,但将其设置为特定类型的所有NAs。然而,从逻辑上讲,我不能这样做 在这种情况下,这可能不太重

帮助(“NA”)

还有常数NA_integer_uu、NA_real_u、NA_complex_u和 支持缺失的其他原子向量类型的NA_字符 值:所有这些都是R语言中的保留字

我的问题是为什么没有
NA\u logical\u
或类似的东西,以及如何处理它

具体地说,我正在创建几个非常相似的大型
数据.table
s,它应该与以后的
rbind
ing类兼容。当一个
data.table
s缺少变量时,我将创建该列,但将其设置为特定类型的所有
NA
s。然而,从逻辑上讲,我不能这样做

在这种情况下,这可能不太重要(
data.table
不喜欢将列从一种类型强制到另一种类型,但它也不喜欢添加行,因此无论如何我必须创建一个新表来保存rbound版本),但我不明白为什么逻辑上应该存在的
NA_逻辑
不存在

例如:

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"
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
库(data.table)
Y Y
a b
1:NA-NA
2:斑马纳
3:na0
4:NA-NA
5:NA-NA
>类别(Y$b)
[1] “整数”
两个问题:

  • 为什么当它的亲戚存在时,
    NA_逻辑
    不存在
  • data.table
    的上下文中,或者为了尽可能避免强制,我应该怎么做?我假设使用
    NA_integer\uu
    在强制方面对我没有什么好处(它将强制我添加到0L/1L中的逻辑,这并不可怕,但并不理想)
  • 我认为基于此,

     #define NA_LOGICAL R_NaInt
    
    $R\u HOME/R/include/R\u ext/Arith.h
    中,我们可以建议在R代码中使用
    NA\u integer
    NA\u real
    ,因此使用普通的旧
    NA

    R> as.logical(c(0,1,NA))
    [1] FALSE  TRUE    NA
    R> 
    R> as.logical(c(0L, 1L, NA_integer_))
    [1] FALSE  TRUE    NA
    R> 
    
    哪个有

    R> class(as.logical(c(0,1,NA)))
    [1] "logical"
    R> 
    R> class(as.logical(c(0, 1, NA_real_)))
    [1] "logical"
    R> 
    

    或者我误解了你的问题?R的逻辑类型是三个值:yay、nay和missing。我们可以使用整数或数字中的NA进行转换。这有帮助吗?

    NA
    已经是逻辑的,所以不需要
    NA\u logical
    。在需要缺少逻辑的情况下,只需使用
    NA
    。注意:

    > typeof(NA)
    [1] "logical"
    
    由于
    NA_*.
    名称都是保留字,因此可能希望尽量减少它们的数量

    例如:

    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"
    
    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
    
    库(data.table)
    X X
    a b
    1:NA-NA
    2:NA-NA
    3:NA错误
    4:NA-NA
    5:NA-NA
    
    啊,这很有意义!他们可以添加一个变量
    NA_logical\uuu
    ,默认情况下它指向保留字,就像
    T
    poitns to
    TRUE
    ?如果你真的必须拥有它,那么你可以自己定义它:
    NA_logical\uuu
    当然,但是我永远不会使用它,因为我担心它会丢失在一台新电脑上可能会失败。现在我知道,
    NA
    显然是一条路要走。这只是一个有趣的怪癖。我突然意识到,
    NA
    是逻辑版本是完全有道理的,因为从那以后它可以被强制“向上”我忍不住要提到Dailywtf.com,在那里人们经常解释一个
    logical
    有可能的值“TRUE,FALSE,File\u Not\u Found”。编辑-如果德克E没有指出
    R
    实际上是这样做的,这会更有趣。