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
相关产品推荐
相关产品推荐

