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

R语言自定义卡方检验函数报错:object 'WGHT' not found

解决R自定义卡方检验函数中object 'WGHT' not found错误

错误原因

你的函数中调用xtabs(w ~ x + y)时,直接使用了函数参数w、x、y,但R无法将这些参数符号映射到数据框data中的列名——xtabs的公式会在全局环境而非数据框环境中解析这些符号,导致找不到WGHT对象。

两种解决方法

方法1:使用Base R的非标准求值(无需额外包)

通过substitute()动态构造公式,让R正确识别参数对应的列名:

chi2_test_multicomparisons <- function(data, w, x, y){
  
  # 动态构造公式,将参数映射为数据框中的列
  formula <- substitute(w ~ x + y)
  
  # crosstab the data 
  cross_tab = xtabs(formula,
                    data=data,
                    exclude=c("NS", "Not applicable"))
  
  # perform chi2 test
  chi2_test = chisq.test(cross_tab, correct=TRUE)
  
  # get the proportions for columns
  prop = round(prop.table(cross_tab, 2), 2)
  
  # extract std and adjusted std residuals
  std_residuals = questionr::chisq.residuals(cross_tab)
  adjust_std_residuals = questionr::chisq.residuals(cross_tab, std=TRUE)
  
  # perform pairwise comparisons
  pair_wise = rcompanion::pairwiseNominalIndependence(t(cross_tab),
                                                      fisher = FALSE,
                                                      gtest  = FALSE,
                                                      chisq  = TRUE,
                                                      method = "fdr")
  list(cross_tab,
       chi2_test,
       prop,
       std_residuals,
       adjust_std_residuals,
       pair_wise)
}

# 调用方式不变
chi2_test_multicomparisons(data=df2, w=WGHT, x=HSI, y=ISMIN)

方法2:传入字符串列名(更直观,避免符号解析问题)

修改函数接受字符串形式的列名,手动构造公式:

chi2_test_multicomparisons <- function(data, w, x, y){
  
  # 用字符串构造公式
  formula <- as.formula(paste(w, "~", x, "+", y))
  
  # crosstab the data 
  cross_tab = xtabs(formula,
                    data=data,
                    exclude=c("NS", "Not applicable"))
  
  # 后续代码与原函数一致
  chi2_test = chisq.test(cross_tab, correct=TRUE)
  prop = round(prop.table(cross_tab, 2), 2)
  std_residuals = questionr::chisq.residuals(cross_tab)
  adjust_std_residuals = questionr::chisq.residuals(cross_tab, std=TRUE)
  pair_wise = rcompanion::pairwiseNominalIndependence(t(cross_tab),
                                                      fisher = FALSE,
                                                      gtest  = FALSE,
                                                      chisq  = TRUE,
                                                      method = "fdr")
  list(cross_tab,
       chi2_test,
       prop,
       std_residuals,
       adjust_std_residuals,
       pair_wise)
}

# 调用时需传入字符串列名
chi2_test_multicomparisons(data=df2, w="WGHT", x="HSI", y="ISMIN")

额外检查

  • 确认数据框df2中确实存在WGHT、HSI、ISMIN三列,无拼写错误
  • 确保已安装并加载依赖包:
install.packages(c("questionr", "rcompanion"))
library(questionr)
library(rcompanion)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:51:37