1

在 R 中,假设有一个数据框“mydata”,包括自变量“组”(两组)和 n 个因变量。我想运行 n t-tests(每个因变量一个),通过执​​行以下操作将结果打印并保存在文件中:

variables<-names(mydata)
variables<-variables[-1] #to remove the group variable
capture.output(for(i in variables){print(t.test(get(paste("mydata$", i, sep=""))~mydata$group))},file="outputfile.txt")

此命令返回以下错误消息:

Error in get(paste("mydata$", i, sep = "")) : object 'mydata$variable1' not found

我究竟做错了什么?

4

2 回答 2

6

简短的回答:get不适$用于数据框的元素。

更好的答案:使用构建整个公式paste并将其t.test作为一个元素发送。另外,使用lapply.

set.seed(5)
x <- matrix(round(runif(100,0,10),1), ncol=10)
colnames(x) <- paste("var", 1:ncol(x), sep="")
mydata <- data.frame(group=gl(2,10), x)

variables <- names(mydata)[-1]
names(variables) <- variables

out <- lapply(variables, function(v) {
  t.test(as.formula(paste(v, "~ group")), data=d)
})

out
于 2012-05-15T18:26:05.383 回答
5

对于其他人,一些示例数据:

mydata <- data.frame(group=sample(1:2, 100, replace=T), variable1=rnorm(100), variable2=rnorm(100), variable3=rnorm(100))

我会使用更直接的方法:

for(i in variables) {
   t.test(mydata[i], mydata$group)
}

如果我使用 for 循环。但是,您可以使用更类似于 R 的样式来执行此操作:

lapply(variables, function(v, df=mydata) t.test(df[v], df$group))
于 2012-05-15T18:27:43.443 回答