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

使用unnest_longer()展开数据框列内列表时遇类型错误的原因

问题:使用unnest_longer()展开列表列时出现类型不兼容错误的原因

问题背景

尝试用unnest_longer()将数据框中包含列表的fields.species列展开为单独行,执行代码时触发类型不兼容错误。

原始数据获取代码

library(jsonlite)
library(tidyverse)
datasets.raw <- fromJSON(query, flatten = TRUE, simplifyDataFrame = TRUE)
datasets.raw$fields.species
datasets.df <- do.call(rbind, datasets.raw) # 转换为数据框

测试数据构造代码

datasets.df <- structure(list(id = c("221", "PXD011681", "PXD013748", "PXD017277", 
                              "PXD013449", "PXD017613"),
                              source = c("221", "pride", "pride", "pride", "pride", "pride"), 
                              fields.species = list(221L, "Homo Sapiens (human)", c("Passer Hispaniolensis", "Passer Domesticus Domesticus"), 
                                                    "Bifidobacterium Longum Subsp. Longum", "Homo Sapiens (human)", 
                                                    "Homo Sapiens (human)")), 
                              row.names = c("hitCount", "entries.1", 
                                            "entries.2", "entries.3", "entries.4", "entries.5"), class = "data.frame")

执行的展开代码

unpack <- datasets.df %>% unnest_longer(fields.species)

报错信息

! Can't combine `..1$fields.species` <integer> and `..3$fields.species` <character>.

错误原因

这个错误的核心是**fields.species列内的列表元素类型不统一**:

  • 第一个列表元素是整数类型(221L)
  • 其余列表元素均为字符类型(如物种名称字符串、多物种字符向量)

unnest_longer()在展开列时,会将所有展开后的元素合并为同一类型的向量,但整数与字符类型无法直接合并,因此触发类型不兼容的错误。

额外注意:第一行(行名hitCount)的fields.species值221L看起来是接口返回的总命中数,并非实际物种数据,若这行不属于需要处理的有效条目,可先过滤该行再执行展开操作,也能避免这个类型冲突问题。

内容的提问来源于stack exchange,提问作者Illimar Rekand

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:43:15