2013-02-25 47 views
-1

需要在循環的每次迭代中存儲函數調用返回的結果。從函數中存儲結果

for (i in 1:x) 
{ 
    datax <- trainingdata[[i]] 
    levels(datax$label) <- c(-1, 1) 
    train_x<-datax[, -1] 
    train_x<-data.matrix(train_x) 
    trainy<-datax[, 1] 

    s_x<-svm.fs(train_x, y=trainy, fs.method="scad", 
          cross.outer=0, grid.search="discrete", 
          lambda1.set=lambda1.scad, parms.coding="none", 
          show="none", maxIter=1000, inner.val.method="cv", 
          cross.inner=5, seed=seed, verbose=FALSE) 
    # Store the result s_x 
} 

s_x需要與名稱一起存儲(它已經存在於一個向量「名稱」中)。

我曾嘗試以下:

s_x_results <- data.frame(x=names, y=data.frame(length(trainingdata))) 

for (i in 1:x) 
{ 
    datax <- trainingdata[[i]] 
    levels(datax$label) <- c(-1, 1) 
    train_x<-datax[, -1] 
    train_x<-data.matrix(train_x) 
    trainy<-datax[, 1] 

    s_x<-svm.fs(train_x, y=trainy, fs.method="scad", 
          cross.outer=0, grid.search="discrete", 
          lambda1.set=lambda1.scad, parms.coding="none", 
          show="none", maxIter=1000, inner.val.method="cv", 
          cross.inner=5, seed=seed, verbose=FALSE) 

    s_x_results[i]$y <- s_x 
} 

,但我得到的錯誤信息:

Error in `$<-.data.frame`(`*tmp*`, "scad.fix", value = list(classes = c(1L, : 
replacement has 11 rows, data has 91 

的最終目標s_x_results被保存在一些文件今後的對應。

+0

是否要將's_x'單獨存儲在每個迭代的獨立對象中,或者在某種列表中進行組合? – 2013-02-25 08:04:21

+0

我想將所有結果存儲在一個對象s_x_results中。謝謝 – Shahzad 2013-02-25 08:05:14

+0

s_x的結構是什麼? – alexwhan 2013-02-25 08:09:03

回答

2

嘗試lapply

myFunc <- function(i) { 
    datax <- trainingdata[[i]] 
    levels(datax$label) <- c(-1, 1) 
    train_x<-datax[, -1] 
    train_x<-data.matrix(train_x) 
    trainy<-datax[, 1] 

    svm.fs(train_x, y=trainy, fs.method="scad", 
       cross.outer=0, grid.search="discrete", 
       lambda1.set=lambda1.scad, parms.coding="none", 
       show="none", maxIter=1000, inner.val.method="cv", 
       cross.inner=5, seed=seed, verbose=FALSE) 
} 

s_x_results <- lapply(1:x, myFunc) 

#Access individual results using s_x_results[[1]], s_x_results[[2]] and so on. 

這應該給你X dataframes的名單。

PS:未經測試的功能,因爲沒有提供樣品數據。

+0

謝謝。關於myFunc的每個結果的名稱與關聯怎麼辦? – Shahzad 2013-02-25 08:50:55

+0

@Shahzad你不清楚你到底在找什麼?你想創建一個對象對於每一次迭代,這樣對於'第i次迭代',一個對象被創建,其名稱取自'names [i]' – 2013-02-25 09:30:24

+0

中的字符串。我用下面的表達式來使它工作。 名稱(s_x_results)< - c(名稱[1:長度(s_x_results)])。謝謝。 – Shahzad 2013-02-25 09:32:21

3

嘗試replicate

res <- replicate(x,funcall) 
+0

Thanks。Please provide some more這個表達式的位置的詳細信息「res」如何適合我的代碼? – Shahzad 2013-02-25 08:15:58