2012-07-24 32 views
0

我正在開發和優化使用lm()函數和隨後的step()函數進行優化的線性模型。我通過使用0和1的隨機生成器(每個有50%的機會)向我的數據框添加了一個變量。我使用這個變量將數據框分成一個訓練集和一個驗證集。如果一個記錄沒有分配給訓練集,它將被分配到驗證集。通過使用這些子集,我可以估計模型的擬合程度(通過對驗證集中的記錄使用預測函數並將它們與原始值進行比較)。我對優化模型的係數以及預測和實際結果分佈之間的KS檢驗結果感興趣。根據循環中的循環編號生成數據框的變量名稱R

我所有的代碼工作正常,但是當我想測試我的模型是否對我選擇的子集敏感時,我遇到了一些問題。要做到這一點,我想創建一個for(我在1:10)循環,每次使用不同的隨機子集。這對我來說是一個很大的挑戰(我以前從未在R中使用過for循環)。

這裏的問題(當然實際上有很多問題,但這裏是其中之一):

我想,這對於在一個獨特的名字每次循環的運行獨立dataframes(例如:RUN1, Run2,Run3)。我已經能夠使用粘貼((「Run」,1:10,sep =「」)創建一個帶有不同字符串的變量,但是這只是給你一個字符串列表。我如何使用這些字符串作爲我的子集)的數據幀?

我期望遇到的另一個問題: 然後,我想使用每個運行的擬合係數,並將它們導出到Excel通過使用coef(函數),我已經能夠檢索係數,但是由於優化算法的原因,模型中包含的係數數量可能會發生變化,這幾乎肯定會給我帶來一些麻煩,將它們粘貼到同一個數據幀中,對此有何想法?

感謝您的幫助。

回答

2

關於第一個問題:

您可以爲之前創建的字符串,用

df.names <- paste(("Run",1:10,sep="") 

然後,for循環創建並執行下列步驟,在數據幀你想要的名稱:

for (i in 1:10){ 
    d.frame <- # create your data frame here 
    assign(df.name[i], d.frame) 
} 

現在您將以10個不同名稱的數據框結束。

你對係數的第二個問題:

據我所知,這些不自然地適應您的數據幀結構。您應該考慮使用列表,因爲它們允許使用不同的類 - 換句話說,對於每次運行,創建一個包含數據框和包含係數的數字向量的列表。

+0

一個更簡單的替代方案甚至可以是在你的循環中創建名稱,使用'assign(paste(「run」,i,sep =「」),d.frame)'。這樣可以避免任何問題,如果您決定更改運行次數,但忘記隨時隨地更改號碼。 – Edward 2012-07-24 19:58:03

+0

感謝您快速回復我 – 2012-07-24 20:11:44

+0

事實上,我設法同時解決了第一個問題和第二個問題(無需創建10個不同的數據框)。我所做的是將不同運行的係數導出到一個數據幀,然後將該數據幀合併到空數據幀中(如第一次運行),如下所示: – 2012-07-25 15:04:36

4

不要在其名稱中創建包含數字的對象,然後嘗試使用獲取和粘貼並分配以後在循環中訪問它們。正確的做法是將您的元素存儲在R列表對象中。