如何用tidyr::unnest展开含vctrs_list_of类型列表列的数据框
解决tidyr::unnest处理vctrs_list_of类型列表列的报错问题
你遇到的这个报错是因为旧版本的tidyr::unnest(0.8.3.9000)对vctrs_list_of这种带类型约束的列表列支持不完善,无法正确识别列的内部类型,进而抛出类型不匹配的错误。下面提供两种可行的解决方案:
方案1:先转换为普通列表再unnest
我们可以先把vctrs_list_of类型的列转换为普通的列表类型,再用unnest展开,具体代码如下:
library(dplyr) library(tidyr) # 将目标列从vctrs_list_of转为普通列表 df_processed <- df %>% mutate(across(c(A, B, C, D), as.list)) # 执行展开操作 df_processed %>% unnest(cols = c(A, B, C, D))
运行后就能得到和purrr::pmap_dfr一致的展开结果:
# A tibble: 6 × 5 ID A B C D <int> <dbl> <dbl> <dbl> <dbl> 1 1 9 3 6 5 2 1 8 5 5 3 3 2 7 2 7 4 4 2 6 6 6 1 5 3 6 1 8 6 6 3 9 5 7 5
方案2:升级tidyr到新版本
如果你的环境允许升级包,建议把tidyr升级到1.0.0及以上版本——后续版本的unnest已经原生支持vctrs系列的类型,不需要额外转换,直接执行你原来的代码就能成功:
# 先升级tidyr(如果未安装最新版) # install.packages("tidyr") # 直接使用unnest df %>% unnest(cols = c(A, B, C, D))
这个方案更简洁,也能避免类型转换的额外步骤。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

