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

如何在回归模型公式中包含含括号的字符串列名?

含括号列名的循环lmer建模报错解决方法

问题背景

导入自Excel的数据框包含带括号的列名,示例数据如下:

df <- data.frame(
  "ID" = c(233,233,243,243),
  "Treatment" = c("A1","B1","A1","B1"),
  "A(secs)" = c(0.1,0.2,0.2,0.1),
  "B(secs)" = c(0.4,0.5,2,1),
  check.names = FALSE # 强制保留原始列名,避免自动替换特殊字符
)

尝试循环列名运行随机效应模型时,执行lmer出现错误:Error in A(secs) : could not find function "A";手动添加反斜杠转义后,又出现object 'A(secs)' not found的问题。

原循环代码(存在语法和逻辑问题):

for (i in c("A(secs)","B(secs")){ # 缺少闭合括号
 FF_df <- df %>%
    group_by(Treatment)%>%
    summarize(mean=mean(!!sym(i)),
              sem = sd(!!sym(i))/sqrt(n()),
              n = n(),
              max = mean + sem, min = mean - sem)

 formula <- as.formula(paste(i,"~ Treatment + (1| ID)")) 
 model <- lmer(formula,data=df)
 summary(model)
}

问题原因

带括号的列名在公式解析时会被R误认为是函数调用(比如A(secs)会被解析为调用函数A并传入参数secs),而非数据框的列名。直接用反斜杠转义无法适配公式的解析规则。

解决方案

1. 修正循环列表的语法错误

将循环列表中的"B(secs"补充为"B(secs)",确保列名字符串完整。

2. 构造公式时用反引号包裹列名

在拼接公式字符串时,给带特殊字符的列名加上反引号(`),明确告诉R这是一个变量名而非函数。修改公式构造代码:

formula <- as.formula(paste0("`", i, "` ~ Treatment + (1| ID)"))

3. 完整可运行代码

library(lme4)
library(dplyr)

df <- data.frame(
  "ID" = c(233,233,243,243),
  "Treatment" = c("A1","B1","A1","B1"),
  "A(secs)" = c(0.1,0.2,0.2,0.1),
  "B(secs)" = c(0.4,0.5,2,1),
  check.names = FALSE
)

for (i in c("A(secs)", "B(secs)")){
  # 统计描述
  FF_df <- df %>%
    group_by(Treatment) %>%
    summarize(
      mean = mean(!!sym(i)),
      sem = sd(!!sym(i))/sqrt(n()),
      n = n(),
      max = mean + sem, 
      min = mean - sem
    )
  
  # 构造公式并拟合模型
  formula <- as.formula(paste0("`", i, "` ~ Treatment + (1| ID)")) 
  model <- lmer(formula, data = df)
  # 打印模型结果,避免循环中结果被覆盖
  cat("\n=== 针对列", i, "的模型结果 ===\n")
  print(summary(model))
}

额外提示

  • 从Excel导入数据时,建议设置check.names = FALSE,防止R自动将特殊字符(如括号、空格)替换为点号,保留原始列名。
  • 在dplyr管道中使用!!sym(i)可以正确解析带特殊字符的列名,但公式构造需要单独处理,因为公式的解析规则与tidyeval不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:46:22