同版本dplyr中dplyr::select(-.data$row_id)本地正常服务器报错求助
集群运行dplyr相关函数报错的排查思路
本地与CentOS 7集群的dplyr版本均为1.0.10,但运行immunogenomics/harmony包中RunHarmony调用的以下函数时,集群报错,本地无异常。
函数代码:
function (x) { data.frame(x) %>% tibble::rowid_to_column("row_id") %>% dplyr::mutate(dummy = 1) %>% tidyr::spread(x, .data$dummy, fill = 0) %>% dplyr::select(-.data$row_id) %>% as.matrix }
报错信息:
simpleError in dplyr::select(., -.data$row_id): :1:5: unexpected symbol
1: Use of
^
排查思路:
- 对比tidyverse依赖包版本:虽然dplyr版本一致,但tidyr、tibble等依赖包的版本可能和本地存在差异。
tidyr::spread在不同版本的行为或兼容性可能有区别,分别在本地和集群执行packageVersion("tidyr")、packageVersion("tibble")对比版本。 - 检查R版本差异:R主版本或小版本的不同可能导致语法解析问题,比如
.data代词的支持细节差异。执行R.version.string对比本地和集群的R版本。 - 排查函数冲突:集群可能加载了覆盖
dplyr::select的包(如MASS包),执行conflicts(detail = TRUE)查看是否存在命名冲突。 - 验证输入变量类型:确认本地和集群传入函数的变量
x类型、内容是否一致,比如是否包含特殊字符、异常值,tidyr::spread对输入格式敏感,异常输入可能引发连锁报错。 - 测试纯净R环境:在集群启动R时添加
--vanilla参数,跳过自定义.Rprofile和环境变量配置,再运行测试代码,排除环境配置干扰。 - 分步调试函数:将函数拆分为单个步骤依次执行,每一步检查输出结果,定位具体出错环节,缩小排查范围。
内容的提问来源于stack exchange,提问作者Lucy
相关产品推荐
相关产品推荐

