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

使用tidyverse的across函数转换非因子列为因子列时遇错误求助

解决dplyr中将非因子列转换为因子列的错误

你遇到的invalid argument type错误,根源是where()的参数写法不对——where()要求传入一个单参数函数,而!is.factor并不是合法的函数形式。

以下是两种可行的修正方案:

方案1:使用lambda表达式(公式风格)

dat %>%
  mutate(across(where(~!is.factor(.x)), as.factor, .names = "{.col}_factor"))

这里~!is.factor(.x)是dplyr支持的简洁写法,.x指代每一列,能正确判断当前列是否为非因子类型。

方案2:使用Negate()反转判断逻辑

dat %>%
  mutate(across(where(Negate(is.factor)), as.factor, .names = "{.col}_factor"))

Negate(is.factor)会生成一个新函数,作用是判断输入是否不是因子,刚好匹配where()的参数要求。

额外说明

如果你的需求是直接替换原列(而不是生成带_factor后缀的新列),只需去掉.names参数:

dat %>%
  mutate(across(where(~!is.factor(.x)), as.factor))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:35:22