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

如何在tidyverse中使用to_factor参数?mutate_at调用报错求替代语法

解决mutate_at中调用to_factor带参数的错误问题

我来帮你搞定这个问题~你遇到的错误是因为在mutate_at里直接调用带参数的to_factor时,函数会立刻执行而不是被应用到每个目标变量上,自然就会提示缺少x参数啦。下面给你几个可行的替代方案:

方案1:使用匿名函数

直接定义一个匿名函数,把每个目标变量作为参数传给to_factor,同时带上你需要的参数:

library(tidyverse)
library(labelled)

df <- data.frame(
  a = labelled(c(1, 1, 2, 3), labels = c(No = 1, Yes = 2)),
  b = labelled(c(1, 1, 2, 3), labels = c(No = 1, Yes = 2, DK = 3))
)

# 使用匿名函数传递参数
glimpse(df %>% mutate_at(vars(a:b), function(x) to_factor(x, drop_unused_labels=TRUE, ordered=TRUE)))

运行结果:

Rows: 4
Columns: 2
$ a No, No, Yes, 3
$ b No, No, Yes, DK

方案2:使用purrr::partial简化写法

如果你不想写完整的匿名函数,可以用purrr的partial函数预先绑定好to_factor的参数,再传给mutate_at,写法更简洁:

# purrr已包含在tidyverse中,无需额外加载
glimpse(df %>% mutate_at(vars(a:b), partial(to_factor, drop_unused_labels=TRUE, ordered=TRUE)))

这个方案的运行效果和方案1完全一致。

方案3:使用dplyr官方推荐的across语法

mutate_at属于dplyr的旧版语法,现在官方更推荐使用across来替代,写法更直观清晰:

glimpse(df %>% mutate(across(a:b, ~to_factor(.x, drop_unused_labels=TRUE, ordered=TRUE))))

这里的~是公式形式的函数,.x代表每个被处理的变量,同样能实现你想要的因子转换效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:02:31