2014-04-09 27 views
0

我有一個很大的遺傳和環境變量數據集,我正在使用線性迴歸。我需要獲得r.squared,adj.r.squared和p值。實際運行迴歸部分並沒有問題,可以得到每個迴歸的總結。我有大約20,000個模型,我需要比較和提取每個值,個人似乎很乏味。我想有一個相對簡單的方法來完成這個任務。將lm摘要中的R^2提取到data.frame中

這是我的用於提取的值到一個data.frame(b1爲我的第一模型的存儲摘要)代碼:

df=data.frame(r.squared=numeric(),adj.r.squared=numeric(),fstatvalue=numeric(),fstatnumdf=numeric(),fstatdendf=numeric()) 
for(i in 1:10) 
{ 
df[iter,]=c(b1$r.squared, b1$adj.r.squared, b1$fstatistic) 
} 

此代碼創建我的data.frame和從相同的模型提取數據(b1)10次。我嘗試了幾種方法來試圖讓模型標識符隨着每次迭代而改變,但沒有運氣。有沒有人有建議?

+0

您使用擬合模型應導致的'list'程序模型(這就是你需要改變的)。然後遍歷列表將會很容易(使用'sapply'比使用'for'更容易)。 – Roland

回答

1

就像@Roland說的那樣,首先將你的對象放到列表中,然後一切都會變得簡單。假設你的工作空間中有大約20,000個物體(!!!),都稱爲例如b1b2,... b20000,你可以把它們粘在列表中,提取彙總統計,並返回一個data.frame這樣的:

# Stick objects in a list 
x <- mget(ls(pattern = "^b[0-9]+$")) 

# Extract summary statistics 
out <- lapply(x , function(x) c(x$r.squared, x$adj.r.squared, x$fstatistic)) 

# Turn into a data.frame 
as.data.frame(out) 
+0

謝謝你們兩位!那是我需要的確切的東西。 lapply函數比for循環更有效率。 – user3516117