tidyr包crossing()函数输出未生成预期列名求助
tidyr::crossing()输出列名带
x$/y$前缀的异常排查 使用tidyr::crossing()处理部分数据框时,生成的交叉tibble中变量名呈现x$col_name、y$col_name的格式;但执行crossing(iris, mtcars)时,输出列名正常,无此类前缀。已确认输入数据框类型与示例一致,且无重复列名,因隐私限制无法共享数据,需排查问题原因。
示例代码:
crossing(iris, mtcars)
会话信息:
R version 4.2.0 (2022-04-22 ucrt) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 10 x64 (build 19044) 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] writexl_1.4.0 readxl_1.4.0 lubridate_1.8.0 forcats_0.5.1 stringr_1.4.0 dplyr_1.0.9 [7] purrr_0.3.4 readr_2.1.2 tidyr_1.2.0 tibble_3.1.7 ggplot2_3.3.6 tidyverse_1.3.1 loaded via a namespace (and not attached): [1] cellranger_1.1.0 pillar_1.7.0 compiler_4.2.0 dbplyr_2.2.0 tools_4.2.0 [6] jsonlite_1.8.0 lifecycle_1.0.1 gtable_0.3.0 pkgconfig_2.0.3 rlang_1.0.2 [11] reprex_2.0.1 rstudioapi_0.13 DBI_1.1.3 cli_3.3.0 haven_2.5.0 [16] xml2_1.3.3 withr_2.5.0 httr_1.4.3 fs_1.5.2 generics_0.1.2 [21] vctrs_0.4.1 hms_1.1.1 grid_4.2.0 tidyselect_1.1.2 glue_1.6.2 [26] R6_2.5.1 fansi_1.0.3 tzdb_0.3.0 modelr_0.1.8 magrittr_2.0.3 [31] backports_1.4.1 scales_1.2.0 ellipsis_0.3.2 rvest_1.0.2 assertthat_0.2.1 [36] colorspace_2.0-3 utf8_1.2.2 stringi_1.7.6 munsell_0.5.0 broom_0.8.0 [41] crayon_1.5.1
排查方向:
- 确认传入
crossing()的是直接的数据框对象,而非未求值的表达式、列表元素引用或其他嵌套结构 - 检查数据框列名是否包含特殊字符(如
$、空格、非ASCII字符),这类字符可能触发内部命名逻辑异常 - 尝试更新tidyr至最新稳定版(当前使用的1.2.0存在命名处理相关的已知bug,后续版本已修复)
- 检查是否存在自定义
crossing()函数覆盖了tidyr原生函数,可通过tidyr::crossing()明确调用验证 - 确认数据框类属性,执行
class(your_df)检查是否为标准data.frame或tibble,避免特殊子类干扰 - 简化测试数据:截取原数据框的前几行/几列再调用
crossing(),判断是否仍出现前缀问题,缩小排查范围
内容的提问来源于stack exchange,提问作者Aegis
相关产品推荐
相关产品推荐

