如何解决使用 mapply() 扩展 lapply() 函数以使用两个列表
我希望创建自己的 Cohen 的 D 函数。我已经设置它目前可以通过单个变量比较所有组。我想扩展它,以便我可以在一个数据框中一次测试多个变量。
数据
n <-50
dat <- data.frame(group=rep(LETTERS[1:4],n/2),test1=rnorm(n),test2=rnorm(n),test3=rnorm(n))
在组列表上工作 lapply() 函数,我想扩展它以生成一个 3x3 数据框,其中 Tests1-3 作为行:
grouplist <- c("B","C","D")
cohensD <- do.call(rbind.data.frame,lapply(grouplist,function(i){
m1<- mean(dat$test1[dat$group==i],na.rm = T)
m2 <- mean(dat$test1[dat$group=="A"],na.rm = T) #ref group
s1 <- sd(dat$test1[dat$group==i],na.rm = T)
s2 <- sd(dat$test1[dat$group=="A"],na.rm = T)
n1 <- length(dat$test1[dat$group==i])
n2 <- length(dat$test1[dat$group=="A"])
lx <- n1- 1
ly <- n2- 1
md <- m1-m2 ## mean difference (numerator)
csd <- lx * s1^2 + ly * s2^2
csd <- csd/(lx + ly)
csd <- sqrt(csd) ## common sd computation
cd <- md/csd; ## cohen's d
return(cd)}))
colnames(cohensD) <- c("cohensD")
cohensD
所需的输出:
group test1 test2 test3
1 B -0.2383797 -0.9938493 1.4751939
2 C -0.1994608 -2.0286277 -0.5582137
3 D -0.6156380 1.0020181 0.2030028
我知道 mapply() 可以解决这个问题,但我无法让它按预期工作。我可能会做一系列的 for 循环,但试图坚持 apply() 系列。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。