data.table:=添加新列时不支持逻辑数据类型?

时间:2012-06-20 15:04:28

标签: r data.table

升级到data.table的最新版本1.8.1(在R-forge上可用)后,我遇到了以下问题。到那个版本,我可以这样做:

DT = data.table(a=LETTERS[c(1,1:3)],b=4:7,key="a")
DT
   a b
1: A 4 
2: A 5
3: B 6
4: C 7

DT[ ,newcol := NA]

即。我能够添加一个填充了NA的新列。现在我收到一条错误,说不支持NA的逻辑类型(实际上DT[ ,newcol := TRUE]也不起作用。)

所以现在我通过首先添加一个双列,然后将其设置为NA或我需要的任何逻辑来解决这个问题:

DT[ ,newcol:=1]
a b newcol
1: A 4      1
2: A 5      1
3: B 6      1
4: C 7      1

DT[ ,newcol:=NA]
a b newcol
1: A 4      NA
2: A 5      NA
3: B 6      NA
4: C 7      NA

我想问一下这是否是正确的方法。我想这不是什么大问题。这样工作正常,只是想避免不必要的步骤。

1 个答案:

答案 0 :(得分:2)

在修复此错误之前(请参阅上面的Matthew Dowle的评论),您可以通过直接在新列中指定所需的NA类型来解决它(当然除了“逻辑”之外,这是不存在的类型现在不工作):

DT <- data.table(a=LETTERS[c(1,1:3)],b=4:7,key="a")
DT[ ,newcol := NA_real_]  ## Other options are NA_integer_ and NA_character_ 
#    a b newcol
# 1: A 4     NA
# 2: A 5     NA
# 3: B 6     NA
# 4: C 7     NA

## Plain old NA has type and class "logical", partly explaining the 
## error message returned by DT[,newcol:=NA]
c(typeof(NA), class(NA))
# [1] "logical" "logical"