R使用dplyr时c_across()报错「仅可在dplyr verbs内使用」如何解决
错误原因
该报错通常由两种情况触发:
- 你使用的dplyr版本低于1.0.0,旧版本对
rowwise()上下文下的c_across()识别存在兼容性问题 - 加载的其他R包冲突,覆盖了dplyr的
mutate()或c_across()函数
解决方法
方案1:升级dplyr到最新版本(优先推荐)
你写的原始代码语法完全符合dplyr新版规范,直接升级包即可正常运行:
install.packages("dplyr") # 升级完成后重新加载tidyverse再运行原有代码即可
方案2:直接指定概率列(无需调整环境,兼容所有版本)
因为你的概率列固定为p1-p5,直接手动拼接列即可绕过c_across()的版本限制:
mydata <- mydata %>% rowwise() %>% mutate(P = sample(1:nsource, size = 1, replace = TRUE, prob = c(p1, p2, p3, p4, p5))) %>% ungroup()
方案3:动态匹配列名(适配p列数量不固定的场景)
如果p列数量不固定、需要用正则匹配取列,可替换为pick()函数实现相同逻辑:
mydata <- mydata %>% rowwise() %>% mutate(P = sample(1:nsource, size = 1, replace = TRUE, prob = as.numeric(pick(matches('^p\\d+$'))))) %>% ungroup()
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

