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

R语言函数调用shapiro_test()报错:指定列不存在问题求助

问题解决:rstatix shapiro_test 列不存在报错

报错原因

原函数中shapiro_test(.data[[var]])在分组后的map处理阶段无法正确解析列引用,rstatix的分组统计函数对tidy eval语法的支持更友好,直接用.data[[var]]会导致内部作用域找不到目标列。

修改后的函数方案

方案1:直接传入列名(无需引号)

将数据框作为参数传入函数,使用{{var}}实现tidy eval插值:

library(dplyr)
library(rstatix)

line_graph <- function(df, var) {
  Normality <- df %>%
    group_by(Treatment, Time_point_secs) %>%
    filter(n_distinct({{var}}) > 1) %>%
    shapiro_test({{var}})
  
  return(Normality)
}

# 调用示例
line_graph(your_dataframe, Pellet)

方案2:支持字符串形式传入列名

如果需要传入字符串(如"Pellet"),用ensym()转换为符号后使用!!插值:

library(dplyr)
library(rstatix)

line_graph <- function(df, var) {
  var_sym <- ensym(var) # 自动识别字符串或裸列名
  Normality <- df %>%
    group_by(Treatment, Time_point_secs) %>%
    filter(n_distinct(!!var_sym) > 1) %>%
    shapiro_test(!!var_sym)
  
  return(Normality)
}

# 两种调用方式都兼容
line_graph(your_dataframe, Pellet)
line_graph(your_dataframe, "Pellet")

额外注意事项

  1. 确保数据框df确实包含目标列,可通过colnames(df)验证列名是否正确
  2. 函数中传入数据框参数(而非依赖全局环境的df),能避免作用域冲突,提升代码复用性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:07:23