首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >羽化中的64位整数支持

羽化中的64位整数支持
EN

Stack Overflow用户
提问于 2019-10-19 07:25:01
回答 1查看 342关注 0票数 0

R中的feather包可以支持64位整数吗?

将dataset传递给feather::write_feather()时,该列将转换为64位浮点型,并失去精度。我希望避免将其转换为字符。

这里有一个简化的例子。在实际项目中,数据库表(使用odbc包检索)的列是合法的64位整数(在bit64包中指定)。

代码语言:javascript
复制
requireNamespace("bit64")

path <- base::tempfile(fileext = ".feather")

ds <-
  tibble::tibble(
    patient_id   = bit64::as.integer64(1:6)
  )
ds

# # A tibble: 6 x 1
#   patient_id
#   <int64>   
# 1 1         
# 2 2         
# 3 3         
# 4 4         
# 5 5         
# 6 6 

feather::write_feather(x = ds, path = path)

ds_read <- feather::read_feather(path)
# # A tibble: 6 x 1
#    patient_id
#         <dbl>
# 1 Inf.Nae-324
# 2 Inf.Nae-324
# 3   1.50e-323
# 4   2.00e-323
# 5   2.50e-323
# 6   3.00e-323


as.integer(ds_read$patient_id)
# Returns: [1] 0 0 0 0 0 0

unlink(path_out)

注意:我不想将它们存储为浮点数,as suggested here

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-19 09:01:25

它实际上是“复杂的”。您可能知道,R本身只有两种类型:32位整数和64位双精度。

因此,为了表示64位整数,Jens在他的bit64包中做了相当多的工作,使用double作为64位有效负载的“载体”,并重新定义所有访问器功能,将其视为64位(有符号)整数。这是可行的。

有几个包本身就支持它,例如data.table。我在创建nanotime时利用了这一点--它使用64位整数表示纳秒。这也是可行的:我们永远不会在两者之间转换为double,并获得忠实的integer64表示。

多年来,我也一直在关注reticulate,它有非常类似的64位整数转换问题(因为它们是Python语言中的原生整数),现在通常已经解决了这些问题。

长话短说:你的问题更多的是对feather的特性请求。随着相关人员现在关注似乎具有64位整数支持的arrow,您很可能会被要求迁移到arrow。或者你可以使用data.table

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58459234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档