使用dplyr::bind_rows合并tribbles时触发vec_size错误
R语言合并tribble对象触发
vec_size()错误的解决方案 问题重现
执行以下合并两个tribble对象的代码时,触发环境类型不匹配错误:
library(tidyverse) dplyr::tribble( ~comp, ~val, "g", 100 ) %>% dplyr::bind_rows( dplyr::tribble( ~comp, ~val, "h", 100 ) )
错误信息
Error in `vec_size()`: ! `x` must be a vector, not an environment.
环境确认
已排除函数遮蔽问题,tidyverse_conflicts()仅显示dplyr的filter()和lag()遮蔽了stats包同名函数,当前会话信息:
R version 4.2.1 (2022-06-23 ucrt) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 10 x64 (build 25211) Matrix products: default locale: [1] LC_COLLATE=English_United States.utf8 LC_CTYPE=English_United States.utf8 [3] LC_MONETARY=English_United States.utf8 LC_NUMERIC=C [5] LC_TIME=English_United States.utf8 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] lubridate_1.8.0 forcats_0.5.2 stringr_1.4.1 dplyr_1.0.99.9000 [5] purrr_0.9000.0.9000 readr_2.1.3 tidyr_1.2.1 tibble_3.1.8 [9] ggplot2_3.3.6 tidyverse_1.3.2.9000 loaded via a namespace (and not attached): [1] rstudioapi_0.14 magrittr_2.0.3 hms_1.1.2 tidyselect_1.1.2.9000 [5] munsell_0.5.0 colorspace_2.0-3 R6_2.5.1 rlang_1.0.6 [9] fansi_1.0.3 tools_4.2.1 grid_4.2.1 gtable_0.3.1 [13] utf8_1.2.2 cli_3.4.1 withr_2.5.0 ellipsis_0.3.2 [17] lifecycle_1.0.2.9000 crayon_1.5.2 tzdb_0.3.0 vctrs_0.4.2.9000 [21] glue_1.6.2 stringi_1.7.8 compiler_4.2.1 pillar_1.8.1.9000 [25] generics_0.1.3 scales_1.2.1 pkgconfig_2.0.3
原因分析
错误根源是开发版dplyr(dplyr_1.0.99.9000)与当前vctrs包版本存在兼容性冲突,开发版包的内部逻辑依赖未匹配稳定版依赖包的接口,导致vec_size()函数误将环境对象当作向量处理。
解决方法
方案1:替换为稳定版dplyr
卸载开发版dplyr并安装官方稳定版,同时更新依赖的vctrs包:
# 卸载开发版dplyr remove.packages("dplyr") # 安装稳定版dplyr install.packages("dplyr") # 更新vctrs包至兼容版本 install.packages("vctrs")
完成后重启R会话,重新运行原代码即可恢复正常。
方案2:临时替代函数
如果暂时无法更换包版本,可使用tibble::add_row()替代bind_rows()实现行添加:
dplyr::tribble( ~comp, ~val, "g", 100 ) %>% tibble::add_row(comp = "h", val = 100)
内容的提问来源于stack exchange,提问作者tomw
相关产品推荐
相关产品推荐

