r - 创建对多个连续变量执行 ttest 的函数时出错

标签 r

因此,我尝试创建一个函数,该函数将接受一串连续变量、一个分类变量和一个数据帧,并输出一个表,其中包含每个连续变量:均值 group1、均值 group2、teststat、置信区间,p 值。

当前这里给出的错误是: model.frame.default(formula = var ~ class, data = data) 中的错误:变量长度不同(为“class”找到)

我希望得到有关如何修复此错误并让此函数执行我喜欢的操作的任何反馈。我想让这个函数更加充实和灵活,但我什至无法让基本版本(处理多个变量)工作。

谢谢!

#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

从内到外工作:

  1. get.stats(...) 获取单列 data,将其拆分为 x1x2 根据 cat,运行 t 检验,并以命名向量的形式返回汇总统计信息。
  2. lapply(...)datacontinvars 列传递给 get.stats(...) 一次一个。
  3. do.call(rbind,...)lapply(...) 返回的向量集按行绑定(bind)在一起,生成最终的向量结果表。

如果您传递列号而不是列名称,这也将起作用。

一条建议:按照您的设置方式,您传递连续变量的列名称,但将分组因子作为向量传递。如果传递分组因子的列名会更清晰。

关于r - 创建对多个连续变量执行 ttest 的函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22289530/

相关文章:

r - 在Linux上安装R : configure: WARNING: you cannot build PDF versions of the R manuals

R shiny plotly 宽度和高度不更新

r - 从 data.frame 制作一个查找表

r - 将列中以逗号分隔的字符串拆分为单独的行

r - 在不解压缩到磁盘的情况下读取zip文件中的RDS文件

r - 根据 data.frame 列值 R 分配点颜色

r - lme4::nlmer,devfun(rho$pp$theta) 中的错误:过时的 VtV 不是正定的

r - R : adding ticks to scale, 引用线和填充条中的 bwplot

rpart 函数过度绘制或未实现所需的分区

r - 使用 data.table 汇总多列