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

R语言自定义函数报错:动态生成列名计算均值失败

动态生成均值列的自定义函数修复方案

模拟数据

set.seed(2023)
pid <- 1:30
y1 <- rnorm(30, 10, 10)
y2 <- rnorm(30, 10, 10)
x1 <- rnorm(30, 5, 2)
x2 <- rnorm(30, 5, 2)
x3 <- rnorm(30, 300, 3)
data2 <- data.frame(pid, y1, y2, x1, x2, x3)

原函数问题分析

原函数存在三个关键错误:

  • 管道符书写不完整:%> 应为标准的 %>%
  • 动态列名赋值逻辑错误:直接用paste0(...) = ...无法识别动态生成的列名,需使用:=结合!!解析字符串列名
  • 函数名冲突:try是R内置函数,自定义函数使用该名称会导致逻辑冲突

修复后的函数

add_manual_mean <- function(data, a, b) {
  # 获取参数对应的列名字符串
  col_a <- rlang::as_name(rlang::enquo(a))
  col_b <- rlang::as_name(rlang::enquo(b))
  # 拼接生成新列名
  new_col <- paste0(col_a, col_b, "_manual_mean")
  
  data <- data %>%
    mutate(!!new_col := ({{a}} + {{b}}) / 2)
  
  return(data)
}

调用示例

t <- add_manual_mean(data2, y1, y2)
# 查看生成的新列
head(t[, c("y1", "y2", "y1y2_manual_mean")])

简化写法(传入字符串列名)

如果更倾向于直接传入列名字符串,可使用.data代词简化逻辑:

add_manual_mean_str <- function(data, a, b) {
  new_col <- paste0(a, b, "_manual_mean")
  data %>%
    mutate(!!new_col := (.data[[a]] + .data[[b]]) / 2)
}

# 调用时传入字符串列名
t2 <- add_manual_mean_str(data2, "y1", "y2")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:52:11