因此,我正在尝试创建一个函数,该函数将接收一串连续变量,一个分类变量和一个数据框,并为每个连续变量输出一个包含以下表格的表格:均值第1组,均值第2组,teststat,置信区间,p-值。
当前在这里给我的错误是:model.frame.default中的错误(公式= var〜类,数据=数据):可变长度不同(为“类”找到)
我希望获得有关如何解决此错误并使此功能执行我喜欢的操作的任何反馈。我想使此函数的方式更加实质和灵活,但是我什至无法使基本版本(处理多个变量)正常工作。
谢谢!
#Continuous must be an object of the form:
#vars<-c("cont1", "cont2", "cont3", etc)
#CREATE DATA
cat1<-sample(c(1,2), 100, replace=T)
cont1<-rnorm(100, 25, 8)
cont2<-rnorm(100, 0, 1)
cont3<-rnorm(100, 6, 14.23)
cont4<-rnorm(100, 25, 8)*runif(5, 0.1, 1)
one<-data.frame(cat1, cont1, cont2, cont3, cont4)
#FUNCTION
two.group.comp<-function(continvars,class,data){
attach(data)
descriptives<-function(var){
test<-t.test(var~class, data)
means<-data.frame(test[5])
mean1<-means[1,1]
mean2<-means[2,1]
teststatbig<-data.frame(test[1])
teststat<-teststatbig[1,1]
conf<-data.frame(test[4])
lconf<-conf[1,1]
uconf<-conf[2,1]
pvalues<-data.frame(test[3])
pvalue<-pvalues[1,1]
variablename<-deparse(substitute(var))
entry<-data.frame(variablename,mean1,mean2,lconf,uconf,teststat,pvalue)
}
var<-data.frame(continvars)
table<<-sapply(var,descriptives)
detach(data)
}
#VARIABLES
continvars<-c("cont1", "cont2", "cont3")
#CALL TO FUNCTION
two.group.comp(continvars=continvars, class=cat1, data=one)
这是您想要的吗?
two.group.comp <- function(continvars,class,data){
get.stats <- function(x,cat){
f <- unique(cat)
x1 <- x[cat==f[1]]
x2 <- x[cat==f[2]]
tt <- t.test(x1,x2)
smry <- c(tt$estimate,tt$statistic,p=tt$p.value)
names(smry) <- c("mean.1","mean.2","t","p")
return(smry)
}
result <- do.call(rbind,lapply(data[,continvars],get.stats,cat=class))
return(result)
}
# create sample dataset
set.seed(1)
cat1 <-sample(c(1,2), 100, replace=T)
cont1<-rnorm(100, 25, 8)
cont2<-rnorm(100, 0, 1)
cont3<-rnorm(100, 6, 14.23)
cont4<-rnorm(100, 25, 8)*runif(5, 0.1, 1)
one <-data.frame(cat1, cont1, cont2, cont3, cont4)
continvars<-c("cont1", "cont2", "cont3")
# call the function...
two.group.comp(continvars,cat1,one)
# mean.1 mean.2 t p
# cont1 24.4223859 25.33275704 -0.6024497 0.54827955
# cont2 0.0330148 0.01168979 0.1013519 0.91947827
# cont3 10.5784201 4.00651493 2.4183031 0.01747468
由内而外的工作:
get.stats(...)
取的单个列data
,将其拆分x1
并x2
根据进行cat
t检验,然后将摘要统计信息作为命名向量返回。lapply(...)
通continvars
的列data
到get.stats(...)
一次一个。do.call(rbind,...)
将按lapply(...)
行返回的向量集绑定在一起,以生成最终结果表。如果您传递列号而不是列名,这也将起作用。
一条建议:设置方式是传递连续变量的列名,而分组因子是向量。如果您通过分组因子的列名,它将更加干净。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句