10

正确使用freadfrom data.table 加载integer64,但我的印象是by语句没有正确处理 int64。我可能在这里做错了什么,这是什么?

library(data.table); library(bit64);
test = data.table(x=c(1,2,3),y=c('x','q','q'),ID=as.integer64(c('432706205348805058','432706205348805058','432706205348805059')))

str(test) #the display is wrong (BUT IT IS EXPECTED)
#Classes ‘data.table’ and 'data.frame':  3 obs. of  3 variables:
# $ x : num  1 2 3
# $ y : chr  "x" "q" "q"
# $ ID:Class 'integer64'  num [1:3] 9.52e-280 9.52e-280 9.52e-280
# - attr(*, ".internal.selfref")=<externalptr> 

test # Here it is displayed correctly
#   x y                 ID
#1: 1 x 432706205348805058
#2: 2 q 432706205348805058
#3: 3 q 432706205348805059

txtR) test$ID
integer64
[1] 432706205348805058 432706205348805058 432706205348805059

txtR) test[,list(count=.N),by=ID] #WRRRONG
                   ID count
1: 432706205348805058     3
4

1 回答 1

8

更新:这现在在 v1.9.3 中实现(可从 R-Forge 获得),请参阅新闻

o bit64::integer64现在可用于分组和连接,#5369。感谢 James Sams 强调 UPC 和 Clayton Stanley。
提醒:fread()已经能够检测和读取integer64一段时间了。

在上面的 OP 示例中:

test[, .N, by=ID]
#                    ID N
# 1: 432706205348805058 2
# 2: 432706205348805059 1

integer64还没有为data.table诸如setkeyor之类的操作实现by。它只是fread作为第一步实施的(2013 年 3 月 6 日首次发布给 CRAN)。例如,它可以用作值列。

通过提交与此相关的错误报告(@Arun 链接到的那个),我可能会混淆问题。严格来说,这不是一个错误,而是一个功能请求。我认为错误列表更像是“在下一个版本之前要解决的重要问题”。

贡献是非常受欢迎的。

于 2013-03-25T23:32:09.537 回答