2013-09-27 55 views
2

我試圖存儲下面代碼的結果,但是我只能想出一個解決方案來保存模型殘差平方和最小的結果。這是有用的,直到結果在c和gamma的範圍內,因此我需要評估其他點的特徵。爲此,我需要存儲每次迭代的結果。有沒有人知道如何在這種情況下做到這一點?在R中存儲循環迭代的結果

在此先感謝!

dlpib1 <- info$dlpib1 
scale <- sqrt(var(dlpib1)) 
RSS.m <- 10 

for (c in seq(-0.03,0.05,0.001)){ 
    for (gamma in seq(1,100,0.2)) 
    { 
    trans <- (1+exp(-(gamma/scale)*(dlpib1-c)))^-1 
    grid.regre <-lm(dlpib ~ dlpib1 + dlpib8 + trans + trans*dlpib1 + 
        + I(trans*dlpib4) ,data=info) 
coef <- grid.regre$coefficients 
RSS <- sum(grid.regre$residuals^2) 

if (RSS < RSS.m){ 
    RSS.m <- RSS 
    gamma.m <- gamma 
    c.m <- c 
    coef.m <- coef 
    } 
} 
} 
grid <- c(RSS=RSS.m,gamma=gamma.m,c=c.m,coef.m) 
grid` 
+3

作爲一般尖端,避免使用'C'如在'R'變量名,因爲它也是最高度使用的功能之一的名稱,'C()' –

回答

2

你或許可以完全避免的for循環。但是,對於如何完成你的任務,你只需要到任何對象要存儲在價值指數。例如,

# outside the for loop 
trans <- list() 

# inside the for loop 
trans[[paste(gamma, c, sep="_")]] <- ... 
+0

你好李嘉圖。很抱歉,在這麼長時間後問這個問題,但是我正在編寫一個使用此函數的包,並且當我包含更多參數(如c)時,需要很長時間才能完成該循環。我注意到你說我可以避免循環結果。你能告訴我你是怎麼想的嗎?非常感謝! – Javier

+0

嗨哈維爾,最好爲此打開一個新的問題,並將銀行鏈接到這一個 –

2

通過迭代存儲模型結果的最簡單方法是在list

List = list() 
for(i in 1:100) 
    { 
     LM = lm(rnorm(10)~rnorm(10)) 
     List[[length(List)+1]] = LM 
    } 
+0

謝謝所有。我使用Roxxy.32的解決方案。這裏是最終的代碼 – Javier

0

我敢肯定保存RSS的,你可以做一些事情的所有迭代像這樣:

dlpib1 <- info$dlpib1 
    scale <- sqrt(var(dlpib1)) 
    RSS.m <- rep(0,N) 
    coef <- rep(0,N) 
    i <- 0 

    for (c in seq(-0.03,0.05,0.001)){ 
     for (gamma in seq(1,100,0.2)) 
     { 
     trans <- (1+exp(-(gamma/scale)*(dlpib1-c)))^-1 
     grid.regre <-lm(dlpib ~ dlpib1 + dlpib8 + trans + trans*dlpib1 + 
         + I(trans*dlpib4) ,data=info) 
    coef <- grid.regre$coefficients 
    RSS.m[i] <- sum(grid.regre$residuals^2) 
    i=i+1 


     } 
    } 
    } 
+0

非常感謝!它像一個魅力。 – Javier