在R中,假设存在包含自变量“group”(两组)和n个因变量的数据帧“mydata”。我想运行n个t检验(每个因变量一个),通过执行以下操作打印并将结果保存到文件中:
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
我做错了什么?
答案 0 :(得分: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
答案 1 :(得分: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))