考虑dat1
在这里创建:
set.seed(123)
dat1 <- data.frame(Region = rep(c("r1","r2"), each = 100),
State = rep(c("NY","MA","FL","GA"), each = 10),
Loc = rep(c("a","b","c","d","e","f","g","h"),each = 5),
ID = rep(c(1:10), each = 2),
var1 = rnorm(200),
var2 = rnorm(200),
var3 = rnorm(200),
var4 = rnorm(200),
var5 = rnorm(200))
dat1
有 5 个变量的测量值,观察值 ( ID
s) 可以根据 3 个分组变量进行
分组Loc
:并保持我的分析整洁。我正在使用该包执行多项操作。以下函数将对我指定的数据进行 Kruskal Wallis 测试,计算效果大小并在单个数据框中返回结果:State
Region
rstatix
efsz
res
library(rstatix)
KruskTest <- function(dat, groupvar, var){
kt <- dat%>%kruskal_test(get(var) ~ get(groupvar))
efsz <- dat%>%kruskal_effsize(get(var) ~ get(groupvar))
res <<- cbind(kt, efsz[,3:5])
res[1,1] <<- var
res$groupvar <<- groupvar
res <<- res[,c(10,1:9)]
}
KruskTest(dat=dat1, groupvar = "Region", var = "var1")
现在我可以使用该函数循环遍历每个响应变量并Region
在单个数据框中获取分组变量的结果(示例显示它),这就是我需要的:
vars <- paste(names(dat1[,5:9]))
a <- data.frame()
for(i in vars){
KruskTest(dat=dat1, groupvar="Region", var= i)
a <- rbind(a, res)
}
这对 Kruskal Wallis 测试很有用,现在我想做一个非常相似的函数来做一个 duns 测试,但是看看会发生什么:
dunn <- function(dat, groupvar, var){
res <<- dat%>%rstatix::dunn_test(get(var) ~ get(groupvar), p.adjust.method = "bonferroni")
}
dunn(dat=dat1, groupvar="Region", var = "var1")
r:Error: Can't extract columns that don't exist. x The column `get(groupvar)` doesn't exist.
dunn_test()
在用户编写的函数之外,您可以kruskal_test()
以完全相同的方式指定数据。那么在这两个函数中指定变量有什么区别,为什么第一个起作用而第二个不起作用?