2017-07-07 24 views
1

所有,我很新的R,並找不到適合我的確切問題的現有問題數據庫中的任何內容。我正在運行幾個迴歸循環(200),並試圖將結果/係數綁定到一個數據框中,我可以使用一組標題將數據導出到Excel。每個迴歸中的所有變量都是相同的。我的循環的迴歸部分看起來像,使用主數據框來聚合迴歸循環使用rbind

getreg<-OutChg~USInput 
stepreg<-lm(getreg,data=mydata) 

我試圖用一個「主」數據框綁定在一起的一切,比如,

master<-data.frame() 
master<-rbind(master,stepreg$coefficients) 

但我得到的迴應Error in stepreg$coefficients : $ operator is invalid for atomic vectors。理想情況下,我想有一些地方我甚至不需要定義master<-data.frame()

任何意見是非常感謝。謝謝!

+0

這個錯誤很可能是由於'stepreg < - lm(getreg,data = mydata)'在調用'stepreg $ coefficients'時還沒有運行,所以我建議首先檢查(例如,如果我採用未分配的變量名稱(例如'xyz')並調用'xyz $ coefficients',則會產生您的錯誤)。另外,如果您可以分享您的循環當前的樣子,那麼給您一個高效的解決方案會更容易。 – cmaher

回答

1

嘗試使用getreg <- as.formula(OutChg ~ USInput)或只是把它放在lm()函數中。 如果您使用str(stepreg),您可能會發現它不是一個列表,而是一些其他數據類型(在這種情況下是一個原子向量)。 爲了使用rbind()變「主人」有存在(的東西)

+0

凱文,謝謝你的回覆。您的解決方案運行良好(使用as.formula)。然而,當我嘗試用迴歸名稱綁定列時,出現一個錯誤,表示'不能強制類型'list'的向量類型'closure'。我嘗試使用的代碼是 'y <-names(Regression1) stepreg <-lm(as.formula(OutChg〜USInput),data = newdata) sign <-cbind(stepreg $ coefficients,y )) mastersign <-rbind(mastersign,sign)' 有關如何將第三列的名稱綁定到累積迴歸係數的數據框上的任何想法?再次感謝你! – JoeJackson1234

+0

@ JoeJackson1234'cbind()'沒有做你想做的(我想)。它會創建兩行(每個係數一個),然後爲「y」添加一列。我總是發現檢查這些變量是否有用,看它們是否包含我認爲的**。 – Kevin

+0

凱文,這實際上是我想要它做的!Y變量標題的額外列。它不斷地將'can not coerce type'closure'返回給'list'類型的向量,儘管...有任何想法嗎? 再次感謝您的幫助! – JoeJackson1234

1

使用data.table

datandfit <- function(x) { 

    USInput <- rnorm(100, 0, 5) 
    OutChg <- USInput*5 + 10 + rnorm(100, 0, 5) 
    mydata <- data.table(USInput, OutChg) 
    stepreg <- lm(OutChg ~ USInput, data = mydata) 
    data.table(t(stepreg$coefficients)) 

} 

這會產生一些隨機數據,擬合模型給它,並返回一個data.table的結果。因爲您已經擁有數據,所以您會跳過該函數的前三行。然後,您可以在該函數上使用lapply,該函數將返回200 data.table s的列表,並使用rbindlist將它們全部合併爲一個data.table

rbindlist(lapply(1:200, datandfit)) 

    (Intercept) USInput 
    1: 9.979968 4.909842 
    2: 10.086159 5.083225 
    3: 10.285307 4.873432 
    4: 10.457751 4.905266 
    5: 9.108176 5.005555 
---      
196: 10.715356 4.846002 
197: 9.938905 4.966180 
198: 9.968473 5.073163 
199: 10.098703 5.065169 
200: 9.538539 4.946085 
0

所有,我終於想通了!作爲一名新用戶和非程序員,弄清楚不同的R對象如何一起工作是很麻煩的,但是在執行任何「綁定」之前使用master-<-list()使它工作......花了我一兩分鐘意識到我無法每次都將循環指定爲列表或刪除以前的聚合......感謝所有人的幫助!