You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从purrr::map_*返回64位整数?解决类型转换报错

解决purrr::map_*返回64位整数列的问题

为什么map_int()会报错?

map_int()要求输出必须是R基础的32位整数类型(typeof()返回integer的对象),而bit64::as.integer64()生成的是带有integer64属性的double向量——本质上不属于基础整数类型,所以map_int()会强行尝试类型转换,最终触发报错。

两种可行解决方案

方案1:用map()生成列表后合并为integer64列

利用vctrs::vec_c()合并列表中的integer64元素,直接生成符合要求的integer64类型列:

library(bit64)
library(tidyverse)

df <- tibble(x=1:3) %>% 
  mutate(y = map(x, ~as.integer64(2^55)) %>% vctrs::vec_c())

# 验证类型
typeof(df$y) # 返回 "double"
class(df$y)  # 返回 "integer64",符合bit64的类型定义

方案2:先获取底层double值再转换回integer64

因为2^55这类整数在double类型中是精确表示的,所以可以先用map_dbl()提取底层数值,再重新转换为integer64:

df <- tibble(x=1:3) %>% 
  mutate(y = map_dbl(x, ~as.double(as.integer64(2^55))) %>% as.integer64())

补充说明

tibble确实支持integer64类型列,只要最终赋值的向量带有integer64类属性即可。map()生成的列表列每个元素都是单个integer64值,用vec_c()合并后就能得到常规的列结构,比保留列表列更符合日常使用需求。

内容的提问来源于stack exchange,提问作者Ben Carlson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 18:40:45