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

使用dplyr批量转换多列数据报错求助:as_dictionary()已废弃

解决dplyr多列转换的报错问题

这个问题我太熟悉了!你遇到的报错是因为dplyr和rlang包更新后,旧的语法被淘汰了——funs()函数已经正式弃用,再加上mutate_all的写法也有了更标准的替代方案,才导致了这个as_dictionary()相关的错误。我给你两种靠谱的修改方案,都能完美解决问题:

方案1:修改原有mutate_all的写法(快速适配)

把原来的funs()换成匿名函数的~写法,这是dplyr更新后兼容旧逻辑的简单修改:

library(dplyr)

df <- data.frame(
 w1 = c("NN1", "NN0", "AJ0", "AJC", "NP0", "VVZ"),
 w2 = c("NN0", "NN2", "AJC", "NN0", "VBN", "NN1"),
 w3 = c("AJ0", "NN2", "NP0", "VVG", "AJS", "NN1"),
 w4 = c("NN2", "NN2", "AJ0", "AJ0", "AJS", "VVD")
)

# 修改后的代码
df %>% mutate_all(~case_when(
  grepl("^N", .) ~ "noun",
  grepl("^V", .) ~ "verb",
  grepl("^A", .) ~ "adjective",
  TRUE ~ "Other"
))

方案2:用dplyr推荐的across()语法(更持久的写法)

mutate_all现在已经被软废弃,未来版本可能会移除,所以更推荐使用mutate(across())的新语法,它也更灵活(比如后续要指定特定列处理时,改起来更方便):

# 推荐的新写法
df %>% mutate(across(everything(), ~case_when(
  grepl("^N", .) ~ "noun",
  grepl("^V", .) ~ "verb",
  grepl("^A", .) ~ "adjective",
  TRUE ~ "Other"
)))

两种方案运行后都会得到同样的结果:

w1       w2       w3       w4
1     noun     noun adjective     noun
2     noun     noun     noun     noun
3 adjective adjective     noun adjective
4 adjective     noun      verb adjective
5     noun      verb adjective adjective
6      verb     noun     noun      verb

内容的提问来源于stack exchange,提问作者Chris Ruehlemann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:30:35