2012-05-15 68 views
1

在R中,假設存在包含自變量「group」(兩組)和n個因變量的數據框「mydata」。我想運行N t個檢驗(每一個因變量),打印和通過執行在文件中保存結果如下: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 

我在做什麼錯?

+2

如果您使用索引,則不會出現此問題。 –

+1

@TylerRinker我經常使用索引;但作爲低劣的程序員,我實際上並不知道它被稱爲索引 - 所以對於其他人可能不知道,請參閱此快速參考:http://thomasleeper.com/Rcourse/Tutorials/vectorindexing.html – NiuBiBang

回答

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)) 
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