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

dplyr使用across搭配matches()报错:mutate输入须为向量而非函数

问题解答

matches()与across()的搭配可用性

matches() 完全可以和 across() 搭配使用,这是dplyr中批量处理多列的标准用法之一。matches()属于tidyselect语法体系的列选择器,作用是匹配符合正则规则的列名,刚好适配across()的列选择参数需求,你的报错和二者的搭配无关。

报错原因

你写的~percent是purrr风格的匿名函数简写,这种写法要求必须指定传入的参数(用.代表当前操作的列),你仅写了函数名percent,相当于把函数本身直接返回,而没有对列数据做计算,因此触发了“返回值是函数不是向量”的报错。

修正方案

有两种常用的正确写法:

  • 写法1:直接传递函数名,不需要加匿名函数标识~
mydf %>% mutate(across(matches('_pct'), percent))
  • 写法2:补全匿名函数的参数调用
mydf %>% mutate(across(matches('_pct'), ~percent(.)))

运行后输出结果如下:

x a_pct y b_pct
1 1   30% a   50%
2 2   20% b   60%
3 3   10% c   70%

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:09:02