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

在dplyr::mutate_at()中内联定义自定义函数的报错原因求解

报错原因解析

你对dplyr中~开头的purrr风格匿名函数简写语法存在误用:

  • dplyr的列修改类函数(包括mutate、mutate_at等)支持以~开头快速定义匿名函数,公式内部的.指代当前传入的目标列向量。
  • 你写的~ function(x1 = ., x2 = 100) return(x1 + x2)逻辑等价于:用~定义了一个匿名函数,这个函数的返回值是另一个未执行的函数对象,而非计算后的数值向量。mutate尝试将函数对象赋值给Sepal.Length列时,就触发了「列必须是向量,不能是函数」的报错。
符合要求的正确写法

如果要求自定义函数完全在mutate_at()内部定义,有两种实现方式:

  1. 直接用~简写逻辑,不需要额外套function定义:
library(dplyr)
data(iris)
iris %>% mutate_at('Sepal.Length', ~ . + 100)
  1. 如果需要显式定义函数结构,写完函数后要立即传入参数执行,返回计算结果:
library(dplyr)
data(iris)
iris %>% mutate_at('Sepal.Length', ~ (function(x1, x2 = 100) {
  return(x1 + x2)
})(x1 = .))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:57:02