You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:45:00