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

R语言重复测量ANOVA报错:attempt to apply non-function问题排查

问题背景

我希望研究肝脏与其他器官的PUFA生化参数是否存在差异,实验为组内设计(每个个体均采集相同组器官样本),样本量2130,QQ图显示数据符合正态性。我用lapply循环对每个PUFA参数调用anova_test执行重复测量单因素ANOVA,代码如下:

lapply(levels(leber_new$PUFA)[-4], function(x)
  droplevels(na.omit(leber_new[leber_new$PUFA==x,c("ID","PUFA","organ","sub_group.x","isotopic_value")])) %>% 
    anova_test(dv = isotopic_value, wid = ID,
               within = c(organ)))

运行后报错:

Error in app$vspace(new_style$`margin-top` %||% 0) : 
  attempt to apply non-function
Called from: clii__container_start(app, "span", class = funname)

问题排查与解决

这个报错大概率是rstatix包的anova_test在批量循环输出时,和控制台的格式化渲染机制冲突导致的,不是代码逻辑问题,解决思路如下:

  • 跳过控制台渲染,提取纯结果表
    anova_test默认会输出带格式的可视化结果(依赖cli包渲染),批量循环时这种渲染会出问题。可以在循环里用get_anova_table()提取纯数据框格式的结果,避开渲染步骤:
library(rstatix)
lapply(levels(leber_new$PUFA)[-4], function(x) {
  # 预处理单PUFA参数的数据集
  temp_data <- droplevels(na.omit(leber_new[leber_new$PUFA==x,c("ID","PUFA","organ","sub_group.x","isotopic_value")]))
  # 执行ANOVA并提取结构化结果
  anova_res <- anova_test(data = temp_data, dv = isotopic_value, wid = ID, within = organ)
  get_anova_table(anova_res)
})
  • 检查包版本兼容性
    如果还是报错,可能是rstatix或cli包的版本不兼容,尝试更新到最新版:
update.packages(c("rstatix", "cli"))
  • 先单组调试,再扩展循环
    可以先单独跑某一个PUFA参数的代码,确认单组分析正常,再扩展到循环:
# 测试第一个PUFA参数的分析逻辑
test_x <- levels(leber_new$PUFA)[-4][1]
temp_data <- droplevels(na.omit(leber_new[leber_new$PUFA==test_x,c("ID","PUFA","organ","sub_group.x","isotopic_value")]))
anova_test(data = temp_data, dv = isotopic_value, wid = ID, within = organ)

如果单组运行正常,那就是批量渲染的问题,用第一种方法解决即可。

内容的提问来源于stack exchange,提问作者Nadiine El Nino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:20:33