如何将相同的命令应用于变量列表

Hei*_*erg 4 r apply

我想对一堆变量应用t检验.下面是一些模拟数据

d <- data.frame(var1=rnorm(10), 
                var2=rnorm(10), 
                group=sample(c(0,1), 10, replace=TRUE))

# Is there a way to do this in some sort of loop?
with(d, t.test(var1~group))
with(d, t.test(var2~group))

# I tried this but the loop did not give a result!?
varnames <- c('var1', 'var2')
for (i in 1:2) {
  eval(substitute(with(d, t.test(variable~group)),
                  list(variable=as.name(varnames[i]))))  
}
Run Code Online (Sandbox Code Playgroud)

此外,是否可以从t检验的结果中提取值(例如,两个组均值,p值),以便循环将在变量之间产生一个整齐的平衡表?换句话说,我想要的最终结果不是一堆t测试,而是一个像这样的表:

Varname   mean1   mean2   p-value
Var1        1.1    1.2     0.989
Var2        1.2    1.3     0.912
Run Code Online (Sandbox Code Playgroud)

dic*_*koa 6

您可以使用formulalapply喜欢这个

set.seed(1)
d <- data.frame(var1 = rnorm(10), 
                var2 = rnorm(10), 
                group = sample(c(0, 1), 10, replace = TRUE))


varnames <- c("var1", "var2")
formulas <- paste(varnames, "group", sep = " ~ ")
res <- lapply(formulas, function(f) t.test(as.formula(f), data = d))
names(res) <- varnames
Run Code Online (Sandbox Code Playgroud)

如果要提取表格,可以这样继续

t(sapply(res, function(x) c(x$estimate, pval = x$p.value)))
     mean in group 0 mean in group 1     pval
var1         0.61288        0.012034 0.098055
var2         0.46382        0.195100 0.702365
Run Code Online (Sandbox Code Playgroud)