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

在DataFrame中展开向量时出现类型不兼容错误

PRIDE数据库数据展开报错问题解决

问题描述

尝试从PRIDE数据库下载挪威提交的数据集,展开fields.species列的多元素向量用于ggplot绘图,使用jsonlite和tidyverse编写代码,但执行unnest时出现类型不兼容的错误。

原代码

library(jsonlite)
library(tidyverse)

query = "https://www.ebi.ac.uk/ebisearch/ws/rest/pride?query=submitter_country:Norway&size=1000&fields=species&format=json"

datasets.raw <- fromJSON(query, flatten = TRUE, simplifyDataFrame = TRUE)
datasets.df <- do.call(rbind, datasets.raw) #转换为dataframe
unpack <- datasets.df %>% select(id, fields.species) %>% unnest(fields.species)

报错信息

Error in col_to_long(): ! Can't combine ..1$fields.species integer and ..3$fields.species character. Run rlang::last_trace() to see where the error occurred.
unpack <- datasets.df %>% select(id, fields.species) %>% unnest(fields.species) Error in list_unchop(): ! Can't combine x[[1]] integer and x[[2]] character. Run rlang::last_trace() to see where the error occurred.

问题原因

  1. 数据提取错误:fromJSON返回的datasets.raw是包含hitCount、entries等多个元素的列表,直接用do.call(rbind, datasets.raw)会错误合并所有顶层元素,导致datasets.df结构混乱,混入非数据集条目内容。
  2. 类型混杂:fields.species列的元素类型不一致,部分是整数(物种ID),部分是字符(物种名称),unnest无法处理混合类型的列表列。

解决代码

library(jsonlite)
library(tidyverse)

query = "https://www.ebi.ac.uk/ebisearch/ws/rest/pride?query=submitter_country:Norway&size=1000&fields=species&format=json"

# 正确提取数据集条目entries部分
datasets.raw <- fromJSON(query, flatten = TRUE, simplifyDataFrame = TRUE)
datasets.df <- datasets.raw$entries

# 统一fields.species的类型为字符后再展开
unpack <- datasets.df %>%
  select(id, fields.species) %>%
  mutate(fields.species = map(fields.species, as.character)) %>%
  unnest(fields.species)

说明

  • 提取datasets.raw$entries才是真正的数据集列表,避免混入hitCount等无关数据。
  • map(fields.species, as.character)将所有物种条目转成字符类型,消除类型差异,确保unnest能正常执行。

内容的提问来源于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.17 03:52:28