运行Purrr::map_dfr时出现「! Can't combine」错误的解决咨询
解决
map_dfr绑定空列表与数据框的错误 问题原因
你遇到的错误是因为map_dfr尝试合并的对象类型不统一:部分返回结果的odds是数据框,而第52个结果的odds是空列表,dplyr::bind_rows无法合并这两种类型。
解决方案
提供两种可行的修改方式:
方法1:先过滤空结果,再合并
先用map获取所有结果,过滤掉odds为空列表的项,再调用map_dfr合并:
library(purrr) library(dplyr) game_odds <- games_eventids %>% map(~ game_odds_func(eventId = .x)) %>% keep(~ !purrr::is_empty(.x$odds)) %>% # 保留odds非空的结果 map_dfr(~ .x$odds)
方法2:在映射时统一返回类型
在map_dfr的匿名函数中,将空列表转换为空数据框,确保所有返回值类型一致:
library(purrr) library(dplyr) game_odds <- map_dfr(games_eventids, function(event_id) { res <- game_odds_func(eventId = event_id) # 空列表转为空tibble,与数据框结构兼容 if (purrr::is_empty(res$odds)) { tibble::tibble() } else { res$odds } })
优化建议
如果有权限修改game_odds_func,建议让函数在无数据时直接返回空数据框(而非空列表),这样后续调用map_dfr时无需额外处理,代码更简洁。
内容的提问来源于stack exchange,提问作者Aaron Morris
相关产品推荐
相关产品推荐

